Значение приращения в запросе обновления mysql

Я сделал этот код для выделения +1 точки, но он не работает должным образом.

mysql_query(" UPDATE member_profile SET points= ' ".$points." ' + 1 WHERE user_id = '".$userid."' "); 

переменная $ points – это точки пользователя прямо сейчас. Я хочу, чтобы она плюс одна к ней .. так пример, если у него было 5 баллов, это должно быть 5 + 1 = 6 .. но это не так, это просто меняется до 1

Что я сделал не так? Спасибо

Вы также можете просто сделать это:

 mysql_query(" UPDATE member_profile SET points = points + 1 WHERE user_id = '".$userid."' "); 

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

 mysql_query("UPDATE `member_profile` SET `points`= `points` + 1 WHERE `user_id` = '".intval($userid)."'"); 

Кроме того, что вы делаете неправильно, вы передали старое количество очков в виде строки ( points='5'+1 ), и вы не можете добавить число в строку. 😉

Надеюсь, я не стану оффтопиком в своем первом посте, но мне хотелось бы немного рассказать о том, как отличить целое число, поскольку некоторые респонденты, похоже, ошибаются.

Поскольку выражение в этом запросе использует арифметический оператор (символ плюс +), MySQL будет преобразовывать любые строки в выражении в числа.

Чтобы продемонстрировать, следующее приведет к результату 6:

 SELECT ' 05.05 '+'.95'; 

Конкатенация строк в MySQL требует функции CONCAT (), поэтому здесь нет никакой двусмысленности, и MySQL преобразует строки в float и добавляет их вместе.

Я действительно думаю, что причина, по которой исходный запрос не работал, скорее всего потому, что переменная $ points не была фактически установлена ​​на текущие точки пользователя. Он был либо установлен на ноль, либо был отменен: MySQL будет пустить пустую строку в ноль. Для иллюстрации ниже возвращается значение 0:

 SELECT ABS(''); 

Как я уже сказал, я надеюсь, что не буду слишком не по теме. Я согласен с тем, что у Daan и Tomas есть лучшие решения для этой конкретной проблемы.

Кроме того, для строки «increment» при обновлении используйте CONCAT

 update dbo.test set foo=CONCAT(foo, 'bar') where 1=1 
 "UPDATE member_profile SET points = points + 1 WHERE user_id = '".$userid."'" 

Кому нужно обновить строку и числа SET @a = 0; UPDATE obj_disposition SET CODE = CONCAT('CD_', @a:=@a+1); SET @a = 0; UPDATE obj_disposition SET CODE = CONCAT('CD_', @a:=@a+1);

Удалите ' вокруг point :

 mysql_query("UPDATE member_profile SET points=".$points."+1 WHERE user_id = '".$userid."'"); 

Вы «литье» целочисленного значения в строку в исходном запросе …

Почему бы вам не позволить PHP выполнять эту работу?

 "UPDATE member_profile SET points= ' ". ($points+1) ." ' WHERE user_id = '".$userid."'" 

Вы должны использовать PDO для предотвращения риска внедрения SQL.

Вы можете подключиться к БД следующим образом:

 try { $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:host=xxxx;dbname=xxxx', 'user', 'password', $pdo_options); $bdd->query('SET NAMES "utf8"'); } catch (PDOException $e) { exit('Error'); } 

Нет необходимости запрашивать БД для получения количества очков. Вы можете инкрементировать непосредственно в запросе обновления ( points = points + 1 ).

(примечание: Кроме того, не рекомендуется увеличивать значение с помощью PHP, потому что вам нужно сначала выбрать данные, а значение может быть изменено, если другие пользователи обновят его.)

 $req = $bdd->prepare('UPDATE member_profile SET points = points + 1 WHERE user_id = :user_id'); $req->execute(array( 'user_id' => $userid ));