Значение приращения в запрос на обновление в MySQL
Я сделал этот код для выдачи +1 балл, но он не работает должным образом.
mysql_query("
UPDATE member_profile
SET points= ' ".$points." ' + 1
WHERE user_id = '".$userid."'
");
переменная $points-это точки пользователей прямо сейчас.. Я хочу, чтобы это плюс один к нему.. так например если у него было как бы 5 очков, то должно быть 5+1 = 6.. но это не так, он просто меняется на 1
что я сделал не так? спасибо
9 ответов:
вы также можете просто сделать это:
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
), и вы не можете добавить номер в строку. ;)
надеюсь, что я не собираюсь оффтопировать свой первый пост, но я хотел бы немного расширить кастинг integer to string, поскольку некоторые респонденты, похоже, ошибаются.
чтобы продемонстрировать, следующее приведет к результату 6:
SELECT ' 05.05 '+'.95';
конкатенация строк в MySQL требует функции CONCAT (), поэтому здесь нет никакой двусмысленности, и MySQL преобразует строки в поплавки и добавляет их вместе.
Я на самом деле думаю, что причина, по которой первоначальный запрос не работал, скорее всего, потому что переменная $points на самом деле не была установлена в текущие точки пользователя. Он был либо установлен в ноль, либо не был установлен: MySQL приведет пустую строку к нулю. Для иллюстрации ниже будет возвращено 0:
SELECT ABS('');
Как я уже сказал, Я надеюсь, что я не слишком вне темы. Я согласен, что Даан и Томас иметь лучшие решения для этой конкретной проблемы.
кроме того, чтобы" увеличить " строку, при обновлении используйте
CONCAT
update dbo.test set foo=CONCAT(foo, 'bar') where 1=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."'");
вы "бросаете" целочисленное значение в строку в исходном запросе...
вы должны использовать 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 ));