2010-09-08 84 views
2

我有一個表中的計數字段,我需要增加,這就是我所擁有的。遞增mysql計數字段

$click_tracker_row = mysql_fetch_array($result); 
$current_count = $click_tracker_row['count']; 
$new_count = $current_count + 1; 
$query_wiki ="UPDATE click_tracker SET count = '{$new_count}' WHERE click_tracker_id = '{$click_tracker_row['click_tracker_id']}' LIMIT 1";     
$result = mysql_query($query) ; 

但它永遠不會改變....是有這樣做的更好的方式和這是爲什麼不工作 數爲整型字段

回答

6

你應該使用SQL簡單地更新此計數器並使用PHP的mysql_real_escape_string() - 函數防止SQL注入:

$query_wiki ="UPDATE click_tracker SET count = count + 1 WHERE click_tracker_id = '".mysql_real_escape_string($click_tracker_row['click_tracker_id'])."' LIMIT 1"; 

此外,還有在你mysql_query() -call一個錯字。您將需要通過$query_wiki

+0

鑑於數據來自可信來源(MySQL數據庫),我不認爲在這種情況下您需要轉義數據。但是問題在於,當單個查詢就足夠了時,他會查詢數據庫兩次,如果他已經有了id(他必須),那麼我會同意的變量需要被轉義。 – 2010-09-08 14:42:46

+0

我加了這個提示,因爲我們無法確定這是來自可靠的來源。我通常的做法是確保它非常安全。 SQL注入並不好玩。我會推薦使用類似PDO而不是PHP的'mysql_ *'函數。 – jwueller 2010-09-08 14:47:43

+0

不僅是錯字,而且是什麼時候'mysql_fetch_array'關聯取回? – RobertPitt 2010-09-08 14:57:16

3

爲了解決第一個問題有沒有更好的辦法這樣做,是的。 爲了在MySQL中遞增計數,只要您有要更新的ID,您就不需要獲取任何內容,而且您還應該確保該查詢的ID已正確轉義。

$id = mysql_real_escape_string($id); // replace $id with however you get the tracker_id 
$query_wiki ="UPDATE click_tracker SET count = count + 1 WHERE click_tracker_id = '{$id}' LIMIT 1"; 

要回答第二個問題,這是爲什麼沒有在下部工作你正在做一個mysql_query($query),而不是一個mysql_query($query_wiki)

0
$click_tracker_row = mysql_fetch_assoc($result); 
$query_wiki ="UPDATE `click_tracker` 
       SET `count` = `count` + 1 
       WHERE `click_tracker_id` = '".$click_tracker_row['click_tracker_id']."'   
       LIMIT 1";     
$result = mysql_query($$query_wiki) ; 
0

如果您有大量的點擊,那麼每次點擊增加計數可能會變得效率低下,因爲它會導致大量的小型數據庫更新。換句話說,你想這樣做

UPDATE click_tracker SET count = count + 5... 

代替

UPDATE click_tracker SET count = count + 1... 
UPDATE click_tracker SET count = count + 1... 
UPDATE click_tracker SET count = count + 1... 
UPDATE click_tracker SET count = count + 1... 
UPDATE click_tracker SET count = count + 1... 

這裏有一個article描述的想法。如果你谷歌PHP rabbitmq你可以得到如何建立一個PHP版本的想法。