2010-09-08 4 views
2

У меня есть поле count в таблице, которое мне нужно увеличить, и это то, что у меня есть.Приращение поля счетчика 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 и использовать mysql_real_escape_string() -функции PHP для предотвращения инъекций 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), я бы не подумал, что вам нужно будет избежать данных в этом сценарии. Но вот в чем проблема, он дважды запрашивает базу данных, когда одного запроса будет достаточно, если у него уже есть идентификатор (который он должен), чтобы переменная, я бы согласился, должен быть экранирован. –

+0

Я добавил этот намек, так как мы не можем быть уверены, что это из надежного источника. Мой нормальный подход - убедиться, что он действительно безопасен. SQL-инъекция - не забава. Я бы рекомендовал использовать что-то вроде PDO вместо функций mysql_ * 'в PHP. – jwueller

+0

Не только опечатка, но когда 'mysql_fetch_array' выбирается ассоциативно? – RobertPitt

3

Для решения первого вопроса есть лучший способом от этого, да. Чтобы увеличить счет в MySQL, вам не нужно ничего извлекать, пока у вас есть идентификатор для обновления, и вы также должны убедиться, что идентификатор правильно экранирован для запроса.

$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 описывая эту идею. Если вы google php rabbitmq, вы можете получить представление о том, как создать версию php.

Смежные вопросы