PHP / mySQL Insert然后通过调用存储过程获取id

时间:2014-05-07 01:58:57

标签: php mysql stored-procedures mysqli insert

我有一个int类型的ID字段,每当我插入一行时自动递增。

我执行此操作时mysql_insert_id()是否获取插入的行

mysql_query("call AddUser($user,$pass);");

我想知道在调用存储过程时是否会获取ID。

1 个答案:

答案 0 :(得分:2)

如果您正在使用存储过程,那么除非程序本身将信息传递出去,否则您无法真正访问该过程中发生的事情。因此,您可以为过程定义一个OUT参数,并返回last_insert_id()值:

<强>程序

delimiter $$
drop procedure if exists p$$
CREATE PROCEDURE p(OUT InsertId int) 
BEGIN
insert test.Numbers (Numbers) values (3);
select last_insert_id() into InsertId ;

END$$
delimiter ;

使用mysqli查询调用

call p(@InsertId);

然后使用另一个mysqli查询检索结果

select @InsertId as id;

注意 - 变量在连接的生命周期中存在,所以除非你关闭连接,否则只要方便就可以检索@InsertId的值。

感谢Patchrick添加PHP细节:

$acct = mysql_query("call p(@InsertId);select @InsertId as id;");
$row = mysql_fetch_array($acct);
echo $row["id"];