PDO中如何获取更新行的ID

5

我使用PDO更新了数据库中的一行记录。

 $stmt = $db->prepare("UPDATE product SET price=? WHERE seller=?");
             $stmt->execute(array(456,"Apple"));

这对我没有起作用。

$updated_id = $db->lastInsertId();

我如何获取更新行的ID。


只有一个销售者为Apple的产品。 - Brainy Prb
哦,好的,我认为你不能在一个查询中获取这些ID,你需要选择它们,最后插入的ID是指最后一次插入。 - Kevin
先选择 ID,然后更新(或反之亦然)。 - Mark Miller
是的,我也这样做了,它起作用了。 我在表中有6行。现在我想查询并找到状态为1的产品,然后在它们之间将“苹果”分配给第一个结果。我该怎么做? - Brainy Prb
3个回答

3

您最好使用PDO::rowCount()来获取受影响的行数。请记住,您的更新语句可能不只更新一行,因此没有办法只获取一个ID。


在我的情况下,只有一行将被更新,能否提供解决方案? - Brainy Prb
如果您知道要更新一行,可以使用提供给它的数据重新查询。选择 id from product where price = ? and seller = ?; - brian
是的,它有效了,我做了同样的事情。 表中有6行。现在我想查询并找到状态为1的产品,然后在它们中间将"Apple"分配给第一个结果。我该怎么做? - Brainy Prb

0
请查看这个答案如何获取MySQL中最后更新行的ID?,或者在相同的where子句上执行select语句(如果您认为它只有一条记录)。
$stmt = $db->query("SELECT id FROM product WHERE seller=:seller");
$stmt->bindParam(':seller', $sellerName, PDO::PARAM_STR)
$row =$stmt->fetchObject();
echo $row->id;

-1

使用这个

$sql="Update table_1 set col_1=?,col_id = LAST_INSERT_ID(col_id) where col_2=? limit 1;SELECT LAST_INSERT_ID() last_update_id;";
$stmt =$dbh->prepare($sql);
$stmt->execute(array('new_val','cond_val'));
$stmt->nextRowset();
$rez=$stmt->fetch(PDO::FETCH_ASSOC);
print_r($rez);

FYI,仅使用更新查询即可使用$dbh->lastInsertId(); - Your Common Sense
1
发布前已经测试过了...但是没有起作用。可能是依赖于数据库驱动程序。 - nuke nuke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接