Php Pdo - 选择最后插入的

Posted

技术标签:

【中文标题】Php Pdo - 选择最后插入的【英文标题】:Php Pdo - Selecting last inserted 【发布时间】:2014-10-12 16:23:51 【问题描述】:

我在一个查询中同时进行了“插入”和“选择”查询。

$_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

我怎样才能在一个查询中做到这一点?或者其他方式。

【问题讨论】:

为什么不通过 PDO 检索最后插入的 id(如 here 所述)? 【参考方案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));

【讨论】:

你能给我一个插入和返回的示例程序吗? @traBolics 我扩展了我的答案,我还回答了older question【参考方案2】:

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

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

【讨论】:

以上是关于Php Pdo - 选择最后插入的的主要内容,如果未能解决你的问题,请参考以下文章

更新选择列表而不刷新 [PDO/PHP/AJAX]

php PDO - 如何获取最后插入的ID?

如何在使用 PHP-PDO 记录查询时获取最后一个插入 ID

PHP PDO 多选查询始终删除最后一个行集

从 Access 获取最后一个插入 ID

PDO从先前选择插入的绑定参数