我有简单的插入/更新页面,我检查是否有“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
}
答案 0 :(得分: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
}
}