2013-07-15 40 views
1

我是新來的PDO,我試着做一個按鈕,當用戶按下按鈕時,相應數字的值增加1。PDO添加一個值

$statement = "UPDATE table SET counter=? WHERE id=?"; 
$z = $db->prepare($statement); 
$z->execute(array($counter+1,$id)); 

$id被正確發送,但我不知道如何添加一個到櫃檯。

+6

你就不能使用:' 「UPDATE表SET計數器=計數+ 1 WHERE ID =?」' –

+0

@SamuelCook:理想情況下在串行事務...否則,你不能真正相信結果。 – cHao

+0

@cHao,Samuel的答案不需要任何形式的交易,它是一個原子操作,並且是完全可預測的。 – Geoffrey

回答

5

你可以讓MySQL的執行更新了你,沒必要獲取計數器和在MySQL更新..

UPDATE table SET counter = counter + 1 WHERE id = ? 

這也原子,同時使多命中不會導致計數錯過了。如果你需要插入的記錄,如果不首先存在,你可以改變這一點請向以下,只要你對「ID」列的唯一/主鍵:

INSERT INTO table (id, counter) VALUES (?, 1) ON DUPLICATE KEY UPDATE counter = counter + 1 

這將既處理插入記錄如果它不存在,並且如果它存在,則更新它。這會更有效,然後執行多個查詢來檢查記錄是否先存在,如果缺失則插入。

在這裏看到更多的信息: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

+0

哪裏的要求INSERT或UPDATE? –

+0

@JasonMcCreary - 答案剛剛更新,以涵蓋最初的要求以及這個方便的額外。 – Geoffrey

+0

如果'計數器'不是一個只有計數器的表中的字段(比如說,如果它是用戶信息的表),如果傳遞了錯誤的ID,那麼創建一個新記錄會是一個非常糟糕的主意... – cHao