繁体   English   中英

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

[英]insert-update pdo mysql query and get last inserted id, if needed

我有简单的插入/更新页面,我检查是否有“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
    } 

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM