Я сделал этот код для выделения +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 ));