繁体   English   中英

预处理语句中用于UPDATE的lastInsertId()

[英]lastInsertId() for UPDATE in Prepared Statement

$query = $database->prepare("UPDATE table SET value = value WHERE value = '$value'");
$query_1->execute();
$database->connection->lastInsertId();

上面的代码不起作用。 我试图获取的值是主键自动增量。

就像lastInsertId()的名称所暗示的那样,它只能用于插入。 如果是这样,在UPDATE上实现相同目标的正确方法是什么?

如果已发生更新,我希望返回的值是表的主键。

就像是..

lastUpadteId()



  $query_1 = $database->connection->prepare("UPDATE accounts SET traffic = traffic + '$file_size', id = LAST_INSERT_ID(id) WHERE primary_key = '$account_id'");
  $query_1->execute();
  echo $database->connection->lastInsertId();

抛出...

致命错误:消息为“ SQLSTATE [42S22]”的未捕获异常“ PDOException”:找不到列:1054“字段列表”中的未知列“ id”

LAST_INSERT_ID()在UPDATE上不起作用,因为它在INSERT上起作用。 但是您仍然可以在更新后使用LAST_INSERT_ID()获得更新的行的ID。 这是查询的写法:

UPDATE table 
SET
  value = value, 
  primary_key = LAST_INSERT_ID(primary_key) 
WHERE value = 'some value'

它对您来说是strage还是primary_key = LAST_INSERT_ID(primary_key)吗? 然后从MySQL手册中阅读: http : //dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

在您的声明中,它可能会更新多个记录。 因此,获取最新的更新ID不是一个好主意。

您可以使用SELECT语句更新之前获取所有ID。

SELECT ID FROM table WHERE value = '$value'

暂无
暂无

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

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