2014-10-22 70 views
0
$query = $database->prepare("UPDATE table SET value = value WHERE value = '$value'"); 
$query_1->execute(); 
$database->connection->lastInsertId(); 

上面的代码不起作用。我试图得到的值是主键自动增量。lastInsertId()for Prepared Statement

由于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' 在'字段列表'

+0

尝试此查询: “UPDATE表SET值= value其中value = '$值',ID = LAST_INSERT_ID(ID)” – 2014-10-22 01:29:54

+0

@ceakki谢谢,但究竟如何我得到的值使用? – 2014-10-22 01:34:24

+0

@ceakki试过,它会抛出未捕获的异常。 – 2014-10-22 01:38:41

回答

1

LAST_INSERT_ID()在UPDATE上不起作用,因为它在INSERT上工作。但是,更新后仍然可以使用LAST_INSERT_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

0

在您的声明中,它可能会更新多个记录。所以得到最新的更新ID不是一个好主意。

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

SELECT ID FROM table WHERE value = '$value' 
+0

好处但实际上不是,在这种情况下只会返回一条记录。 – 2014-10-22 01:32:19

相关问题