lastInsertId()用于准备语句中的UPDATE

时间:2014-10-22 01:19:29

标签: php mysql sql-update 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();

...抛出

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

2 个答案:

答案 0 :(得分:1)

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'

对你来说primary_key = LAST_INSERT_ID(primary_key)看起来很吓人吗?然后从MySQL手册中阅读:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

答案 1 :(得分:0)

在您的陈述中,它可能会更新多条记录。所以获取最后一次更新ID并不是一个好主意。

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

SELECT ID FROM table WHERE value = '$value'