0

「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
    } 
4

1 に答える 1

2

実行するクエリとして挿入クエリを選択する場合とまったく同じ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
    }
}
于 2012-11-18T20:01:16.240 に答える