从最后插入的行中获取最后一个插入ID

时间:2013-12-11 18:28:25

标签: php mysql sql stored-procedures last-insert-id

我又来了,我疯了! 我有这个存储过程:

CREATE DEFINER=`root`@`localhost` PROCEDURE `aggiungi_categoria`(IN   `id_categoria_principale` INT, IN `nome_categoria` VARCHAR(150), IN `sigla_categoria`    VARCHAR(10), IN `stato_categoria` INT) NOT DETERMINISTIC MODIFIES SQL DATA SQL SECURITY   DEFINER
begin

select @rgt := rgt,@lft := lft from categorie where id = id_categoria_principale;

if @rgt - @lft = 1 then

UPDATE categorie SET rgt = rgt + 2 WHERE rgt > @lft;
UPDATE categorie SET lft = lft + 2 WHERE lft > @lft;

insert into categorie (nome,sigla,stato,lft,rgt)
values(nome_categoria,sigla_categoria,stato_categoria,@lft+1,@lft+2);

 ELSE

 UPDATE categorie SET rgt = rgt + 2 WHERE rgt > @rgt-1;
 UPDATE categorie SET lft = lft + 2 WHERE lft > @rgt-1;

 insert into categorie (nome,sigla,stato,lft,rgt) values
(nome_categoria,sigla_categoria,stato_categoria,@rgt,@rgt+1);

 end if;


 end

我怎样才能获得最后一个插入ID?我尝试了所有,使用param或在表上执行选择max(id)或“set last_id = last_insert_id()”但我不知道如何通过php获取它?

当我在phpmyadmin中调用该过程时,我得到类似

的内容
@rgt:=number,@lft:=number2

并且在php中显然我在数组中获得了相同的结果。

我做错了什么?

3 个答案:

答案 0 :(得分:1)

您应该可以使用mysql_insert_id‎来获取最后一个插入语句的ID 参考:http://php.net/mysql_insert_id

但是,mysql_*函数现已弃用(请参阅下文),您应使用等效的mysqli_*函数或方法。上述函数的等价物为:$mysqli->insert_id()
参考:http://www.php.net/manual/en/mysqli.insert-id.php

已弃用mysql_*类别的函数,并在此处复制警告:

  

自PHP 5.5.0起,此扩展程序已弃用,并将在中删除   未来。相反,MySQLiPDO_MySQL扩展名   应该使用。另请参阅MySQL: choosing an API指南和   related FAQ了解更多信息。替代此功能   包括:

     

答案 1 :(得分:1)

如果您正在使用MySQLi,那么您将拥有类似的内容。

程序:

$link = mysqli_connect($db_host, $db_user, $db_pass, $db_table);

$query = "INSERT INTO table VALUES($val, $val2, $val3)";
mysqli_query($link, $query);
$id = mysqli_insert_id($link);

OOP:

$mysqli = new mysql($db_host, $db_user, $db_pass, $db_table);

//query
$id = $mysqli->insert_id;

希望这有帮助!

如果您有任何问题,请告诉我。

答案 2 :(得分:0)

好的,我解决了!

我添加了一个名为last_id的int输出参数, 在结束标记之前我包含了这个声明:

select last_insert_id() into last_id;

在PHP中我执行:

$db -> execQuery('call aggiungi_categoria('.$parametri['id_categoria_principale'].',"'.$parametri['nome'].'","'.$parametri['sigla'].'",'.$parametri['stato'].',@lastId);');

最后

$lid = $db ->execQuery('select @lastId;');