Я сделал этот код для получения +1 балла, но он не работает должным образом.
mysql_query("
UPDATE member_profile
SET points= ' ".$points." ' + 1
WHERE user_id = '".$userid."'
");
переменная $ points - это очки пользователя прямо сейчас .. Я хочу, чтобы она добавляла к ней плюс один .. так, например, если у него было 5 очков, это должно быть 5 + 1 = 6 .. но это не так, просто меняется к 1
Что я сделал не так? Спасибо
php
mysql
sql
sql-update
Карем
источник
источник
Ответы:
Вы также можете просто сделать это:
mysql_query(" UPDATE member_profile SET points = points + 1 WHERE user_id = '".$userid."' ");
источник
UPDATE xyz SET points = MIN(points + 1, YOUR_LIMIT_VALUE_HERE)
но ничего не вышло . Что работы было:UPDATE xyz SET points = points + 1 WHERE points < YOUR_LIMIT_VALUE_HERE
.Вы можете сделать это, не запрашивая фактическое количество очков, что сэкономит вам время и ресурсы во время выполнения скрипта.
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 преобразует строки в числа с плавающей запятой и складывает их вместе.
Я действительно думаю, что причина, по которой первоначальный запрос не работал, скорее всего, заключается в том, что переменная $ points фактически не была установлена на текущие точки пользователя. Он был либо установлен на ноль, либо не был установлен: MySQL приведет пустую строку к нулю. Для иллюстрации следующее вернет 0:
SELECT ABS('');
Как я уже сказал, надеюсь, я не слишком отклоняюсь от темы. Я согласен с тем, что у Даана и Томаса есть лучшие решения для этой конкретной проблемы.
источник
"UPDATE member_profile SET points = points + 1 WHERE user_id = '".$userid."'"
источник
Также, чтобы "увеличить" строку при обновлении, используйте
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);
источник
Вы должны использовать 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 ));
источник
Снимите
'
вокруг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."'"
источник