Php Pdo - 选择最后插入

时间:2014-10-12 16:23:51

标签: php mysql pdo last-insert-id

我在一个查询中一起“插入”和“选择”查询。

$_SESSION['LoginUID']=1;
$Mesaj='ffdd';
$Ek=12;
$cid=112;
$Kaydet=$db->query("
               Insert Into Reply (Kimden,Mesaj,Ek,cid) 
               Values (".$_SESSION['LoginUID'].",'$Mesaj',$Ek,$cid);
               select r_id,KayitZaman from Reply 
               where r_id=LAST_INSERT_ID();")
            ->fetch(PDO::FETCH_ASSOC);

但我无法选择最后插入的行。它必须像这样返回 M_ID KayitZaman
16 1413130807000

我如何在一个查询中执行此操作?或者其他方式。

2 个答案:

答案 0 :(得分:1)

您不能同时运行两个查询,当时只能运行一个

插入后,运行select:

$stmt = $db->query('select r_id,KayitZaman from Reply where r_id=LAST_INSERT_ID()');

或者您可以使用内置函数传递最后插入的Id

$stmt = $db->prepare('select r_id,KayitZaman from Reply where r_id= ?');
$stmt->execute(array($db->lastInsertId()));

如果您想立即执行整个操作,请创建存储过程。


修改

DELIMITER //
 CREATE PROCEDURE sp_insert_get_reply(IN `p_Kimden`, 
                                      IN `p_Mesaj`, 
                                      IN `p_Ek`, 
                                      IN `p_cid`)
   BEGIN
   INSERT INTO `Reply` (`Kimden`, `Mesaj`, `Ek`, `cid`) 
   VALUES (p_Kimden, p_Mesaj, p_Ek, p_cid);

   SELECT `r_id`, `KayitZaman` 
   FROM Reply WHERE r_id=LAST_INSERT_ID()
   END //
 DELIMITER ;

然后从PDO调用该函数:

$stmt = $db->prepare('CALL sp_insert_get_reply(?, ?, ?, ?)');
$stmt->execute(($_SESSION['LoginUID'], $Mesaj, $Ek, $cid));

答案 1 :(得分:0)

您应尝试在PDO insert来电中发出exec(),然后在select来电中使用query跟进。您仍然可以在LAST_INSERT_ID()查询中使用select并保留数据完整性。

如果出于某种原因,必须在程序的单个请求中执行这两个语句,您可以使用mysqli的多语句功能,或者您可以编写存储的内容过程