2013-12-11 144 views
0

我又来了,我越来越疯狂! 我有这个存储过程:从最后插入的行中获取最后一个插入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很显然,我得到阵列相同的结果。

我做错了什么?

+2

PHP中的mysql_insert_id()'不起作用? (或者如果你使用MySQLi,则使用'$ mysqli-> insert_id') –

+0

它是一个MySQL数据库吗?如果是这样,你使用什么扩展名,例如mysql,mysqli,pdo等? –

+0

@MartinMajer我直接在过程结束时使用它,就像在last_id中选择last_insert_id()或设置set last_id = last_insert_id(),其中last_id是out参数。 –

回答

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;'); 
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。替代此功能 包括:

+0

是的,我很抱歉,我错过了告诉你,我使用mysqli的,我有功能在我的DB类返回$ mysqli-> INSERT_ID(),但它不” t工作,结果0.相反,当我做一个插入查询(没有调用过程)它的工作 –

+0

@MarcoC如果你看看我的答案下面,我相信它会帮助你。 –

+0

@RossWilson谢谢你,但在我的情况下,它不起作用,因为我在程序中使用“插入”。所以我尝试了两种方法(在这种情况下)我的答案是正确的。但是,您的答案是正确的,但正如您所建议的那样执行插入命令时。 –

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; 

希望这有助于!

让我知道,如果你有任何问题。