2014-10-22 69 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

相關問題