mysql - insert-update pdo mysql 查询并获取最后插入的 id(如果需要)

标签 mysql pdo insert-update

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

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

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

最佳答案

您可以使用与选择插入查询作为要执行的查询完全相同的 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
    }
}

关于mysql - insert-update pdo mysql 查询并获取最后插入的 id(如果需要),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13443862/

相关文章:

PHP - rowCount() 给出相同的值,无论字符串是否存在

php - 带有爆炸/内爆的多术语 SQL 和 PHP PDO

php - 使用一个参数 pdo 查询两个表

iphone - FMDB:错误 14,无法打开数据库文件

sql - ON DUPLICATE KEY UPDATE 多字段索引

mysql - 在mysql中选择非字母记录

php - 如何解析数组 PHP->JSON->XCODE 中的数组

mysql - 我应该如何处理成分数据库中的计量单位?

mysql - 在 MySQL 表中同时插入和更新转义字符、单引号和双引号

mysql - 无法设置 IdentityUser 上的外键