2010-09-08 72 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版本的想法。