如果需要,插入更新 pdo mysql 查询并获取最后插入的 id

Posted

技术标签:

【中文标题】如果需要,插入更新 pdo mysql 查询并获取最后插入的 id【英文标题】:insert-update pdo mysql query and get last inserted id, if needed 【发布时间】:2012-11-18 19:42:07 【问题描述】:

我有简单的插入/更新页面,我检查是否有“id”,如果没有,则继续插入查询,否则继续更新查询,这工作正常。问题是我需要该 id 用于下一个查询,在插入查询的情况下,我会将其作为“lastInsertId”获取,但在更新查询的情况下,“lastInsertId”将覆盖 $_POST [“id”]。

有没有办法识别已执行的查询(插入或更新)然后获取正确的 id,或者我必须单独绑定/执行查询?

$id= $_POST["id"];  
  try  
    $DBH = db_connect ();
    $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
      if ($id== "") 
         $query= $DBH->prepare('INSERT INTO table (x1,x2) VALUES(:x1,:x2)');                        
       else 
         $query= $DBH->prepare('UPDATE day SET x1=:x1, x2=:x2 WHERE id= :id'); 
           $query-> bindValue(':id', $id);
      

           $query-> bindValue(':x1', $x1);
           $query-> bindValue(':x2', $x2);                                                                  
           $query-> execute();                              

        $id= $DBH-> lastInsertId('id') ; //get last inserted ID
     

【问题讨论】:

【参考方案1】:

您可以使用完全相同的 if 子句来选择插入查询作为要执行的查询。那么您的代码将如下所示:

$id= $_POST["id"];  
    try  
      $DBH = db_connect ();
      $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
      if ($id== "") 
         $query= $DBH->prepare('INSERT INTO table (x1,x2)     VALUES(:x1,:x2)');
       else 
         $query= $DBH->prepare('UPDATE day SET x1=:x1, x2=:x2 WHERE id= :id'); 
         $query-> bindValue(':id', $id);
      

       $query-> bindValue(':x1', $x1);
       $query->bindValue(':x2',$x2);                                                                  
       $query-> execute();

    if($id=="")
        $id= $DBH-> lastInsertId('id') ; //get last inserted ID
    

【讨论】:

以上是关于如果需要,插入更新 pdo mysql 查询并获取最后插入的 id的主要内容,如果未能解决你的问题,请参考以下文章

PHP MySql PDO 多次插入不起作用

JS数组到PHP并使用PDO更新MYSQL中的表

如果记录已经存在或者在 PDO MySQL 插入查询中不存在,如何生成 javascript 警报?

在将多个或批量插入查询更改为 PDO 时需要帮助

MySQL 和 PDO,加快查询并从 MySQL 函数(例程)获取结果/输出?

PHP操作PDO预处理以及事务