2012-09-06 46 views
0

我成功更新MySQL的行加一,如何獲得

$result = mysql_query("UPDATE $table SET `queue2` = `queue2` + 1 WHERE `id` = '$getid'"); 

,但我怎麼能得到「隊列」的值,而無需打開一個新的請求到MySQL

我可以簡單地得到更新值與此命令的新值

$selresult = mysql_query("SELECT * FROM $table WHERE `id` = '$getid'") or die(mysql_error()); 

但恐怕數據庫可以再得到新的更新,我會得到更高的數

任何想法如何做到這一點?

+0

正如[引言](http://www.php.net/manual/en/intro.mysql.php)給PHP手冊的一章'mysql_ *'函數所述:*此擴展名不建議編寫新的代碼。相反,無論是[mysqli](http://www.php.net/manual/en/book.mysqli.php)還是[PDO_MySQL](http://www.php.net/manual/en/ref.pdo應該使用-mysql.php)擴展名。另請參閱[MySQL API概述](http://www.php.net/manual/en/mysqlinfo.api.choosing.php)以獲取進一步幫助,以便選擇MySQL API。* – eggyal

回答

0

查看網址: -

PHP + MySQL transactions examples

試試這個: -

printf ("Updated records: %d\n", mysql_affected_rows()); 
mysql_query("COMMIT"); 
+0

這部分適用於我,例如i說...我想獲得「queue2 + 1」的價值 – Kirma

+0

我已經更新我的答案,請看看。 –

0

您將需要使用的查詢之間的交易是一定的。

交易文檔are here。一個好問題,涵蓋它的細節:PHP + MySQL transactions examples

編輯:

從不同的角度看它,你爲什麼不這樣做反向關係嗎?它可能保存需要一個交易(認爲這是可能的,你多寫之前讀取):

獲取您queue2值在頁面從這個顯示的值:

mysql_query("SELECT * FROM $table WHERE `id` = '$getid'"); 

你現在有真正的價值,這樣你就可以運行:

$result = mysql_query("UPDATE $table SET `queue2` = `queue2` + 1 WHERE `id` = '$getid'"); 

沒有交易,你知道數據的更新前的值。

+0

@Kirma看到編輯,可能會解決所有的問題,而無需交易。 – Fluffeh

+0

,因爲我恐怕2人可以得到相同的價值..當你實際執行+1並獲得價值時,人們將無法獲得相同的價值 – Kirma

+0

然後重新開始:唯一的方法是擁有每個連接/客戶端的唯一編號使用LOCKING(或MySQL主鍵)。 – Konerak

0

您可以使用查詢來更新值。

mysql_query("UPDATE user_profile SET userpoints = userpoints + 1 WHERE user_id = '".$user_id."'"); 
+0

他有點失望 - 他想知道在第二次查詢之前沒有其他查詢已經更新了這一行。 – Fluffeh