加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 插入从触发器生成的ID字段,但不传递

发布时间:2020-12-13 17:26:47 所属栏目:PHP教程 来源:网络整理
导读:在 MySQL中,我有一个触发器: BEGIN IF (EXISTS(SELECT * FROM devices WHERE device_id = NEW.device_id)) THEN SET NEW.id = NULL; ELSEINSERT INTO objects (object_type) VALUES ('3');SET NEW.id = LAST_INSERT_ID(); END IF;END 当此触发器获取新的id(
在 MySQL中,我有一个触发器:

BEGIN
   IF (EXISTS(SELECT * FROM devices WHERE device_id = NEW.device_id)) THEN
    SET NEW.id = NULL;
   ELSE
INSERT INTO objects (object_type) VALUES ('3');
SET NEW.id = LAST_INSERT_ID();
   END IF;
END

当此触发器获取新的id(来自objects表)时,它会将id插入到devices表的id列中.

当我引用它时(例如使用mysql_insert_id();在PHP中),它是空的.

如何将触发器中的插入ID(LAST_INSERT_ID();)作为mysql_insert_id()返回给PHP中的函数; ?

解决方法

我个人使用存储过程.

以下是PDO的基本示例:

用于创建存储过程的代码:

CREATE DEFINER=`user`@`localhost` PROCEDURE `InsertUser`(IN `Input_username` INT,OUT `Out_ID` INT)
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN

   INSERT INTO users(
        username)
    VALUES (
    Input_username);

    SET Out_ID = LAST_INSERT_ID();
    SELECT Out_ID;
END

和PHP代码:

$insert = "CALL InsertUser(:Input_username,@Out_ID)";
  $bdd = new PDO('mysql:host=localhost;dbname=db-name','user','password');

  $stmt = $bdd->prepare($insert);     
  $stmt->bindParam(':Input_username',rand(),PDO::PARAM_STR); // to create random name

  $stmt->execute();
  $tabResultat = $stmt->fetch();
  $id_user = $tabResultat['Out_ID'];
  var_dump($id_user);

我希望我有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读