在MySQL中获取最后插入的ID表单存储过程

Ekk*_*kky 24 mysql

如何获取最后插入的ID?

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_insertzonemsg`

   (IN User_Id INT(10),
    IN zid INT(10),
    IN update_titles VARCHAR(50),
    IN textarea1s TEXT,
    IN filupload1s TEXT,
    IN audio1s VARCHAR(100),
    OUT out_id INT(10))
        BEGIN
        INSERT INTO zone_message_master
        **(user_id,ZoneID,update_title,textarea1,filupload1,
        audio1,LastUpdate)**
        VALUE
        **(User_Id,zid,update_titles,textarea1s,
        filupload1s,audio1s,NOW());**

SELECT **id** as **out_id**
FROM **zone_message_master** LAST_INSERT_ID();
END$$
Run Code Online (Sandbox Code Playgroud)

我需要返回最后插入的ID作为out_id表格zone_message_master吗?

Dev*_*art 40

您需要使用SET语句.例如 -

表:

CREATE TABLE table1(
  id INT(11) PRIMARY KEY AUTO_INCREMENT,
  column1 VARCHAR(10),
  column2 VARCHAR(10)
);
Run Code Online (Sandbox Code Playgroud)

程序的正文:

BEGIN
  INSERT INTO table1(column1, column2) VALUES ('value1', 'value2');
  SET out_param = LAST_INSERT_ID();
END
Run Code Online (Sandbox Code Playgroud)

请注意,INSERT语句中未指定ID字段.该值将自动插入; 当然,此ID字段必须具有AUTO_INCREMENT选项.


小智 12

您可以借助以下代码获取上次插入ID: -

*******只需创建一个存储过程:*******

CREATE DEFINER=`root`@`localhost` PROCEDURE `add_enquiry`(
IN EnquiryNo varchar(40),
IN OpeningDate date,
IN ClosingDate date,
IN  CreatedOn date,
OUT LID int(11)
)

BEGIN

INSERT into `enquiries` SET `enquiry_no`=EnquiryNo ,`opening_date`=OpeningDate ,`closing_date`=ClosingDate,`created_on` =CreatedOn;

SET LID = LAST_INSERT_ID();
END    
Run Code Online (Sandbox Code Playgroud)

*******打电话给PHP:*********

$rs = $dbh->query('CALL add_enquiry("ENQ" ,"2016-08-19","2016-08-18", "2016-11-23",@LID)'); 

$rs2 = $dbh->query("SELECT @LID as id");
$row = $rs2->fetchObject();
echo $row->id;
Run Code Online (Sandbox Code Playgroud)

关心阿德南

  • 这个问题与PHP无关,也没有这样标记。MySQL完全独立于PHP,并且您的PHP代码示例不合时宜,并且在此答案上不适用。 (2认同)