+1 포인트를 제공하기 위해이 코드를 만들었지 만 제대로 작동하지 않습니다.
mysql_query("
UPDATE member_profile
SET points= ' ".$points." ' + 1
WHERE user_id = '".$userid."'
");
$ points 변수는 현재 사용자의 포인트입니다. 1에 플러스를 더하고 싶습니다. 예를 들어 그가 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은 문자열을 부동 소수점으로 변환하고 함께 추가합니다.
실제로 초기 쿼리가 작동하지 않은 이유는 $ points 변수가 실제로 사용자의 현재 포인트로 설정되지 않았기 때문일 가능성이 높습니다. 0으로 설정되었거나 설정되지 않았습니다. MySQL은 빈 문자열을 0으로 캐스팅합니다. 설명을 위해 다음은 0을 반환합니다.
SELECT ABS('');
내가 말했듯이, 나는 너무 화제가되지 않기를 바랍니다. Daan과 Tomas가이 특정 문제에 대한 최상의 솔루션을 가지고 있음에 동의합니다.
답변
"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);
답변
SQL 삽입 위험을 방지하려면 PDO를 사용해야합니다.
다음과 같이 DB에 연결할 수 있습니다.
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');
}
포인트 수를 얻기 위해 DB를 쿼리 할 필요가 없습니다. 업데이트 쿼리 ( 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
));