복붙노트

[SQL] MySQL의 업데이트 쿼리의 증가 값

SQL

MySQL의 업데이트 쿼리의 증가 값

나는 1 점을주는이 코드를 만들었습니다,하지만 제대로 작동하지 않습니다.

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

그는 5 점처럼 한 예는, 그것이 있어야하므로 $ 포인트 변수는 ... 나는 그것을 원하는 플러스 하나 .. 현재 보유한 가장 포인트 인 5 + 1 = 6 ..하지만, 그것은 단지 변화가 나던 1

어떻게 내가 잘못 한거야? 감사합니다

해결법

  1. ==============================

    1.또한 바로이 작업을 수행 할 수 있습니다 :

    또한 바로이 작업을 수행 할 수 있습니다 :

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

    2.당신은 포인트의 실제 금액을 조회 할 필요없이이 작업을 수행 할 수 있으므로 스크립트를 실행하는 동안 당신에게 시간과 자원을 절약 할 수 있습니다.

    당신은 포인트의 실제 금액을 조회 할 필요없이이 작업을 수행 할 수 있으므로 스크립트를 실행하는 동안 당신에게 시간과 자원을 절약 할 수 있습니다.

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

    그 밖에, 당신이 잘못된 일을했다하면 (포인트 = '5'+ 1) 문자열로 지점의 이전 양을 통과, 당신은 숫자를 문자열로 추가 할 수 있다는 것입니다. ;)

  3. ==============================

    3.희망 내 첫 번째 게시물에 논외 않을거야,하지만 일부 응답자는 잘못을 가지고있는 것 같습니다 나는 문자열 정수의 캐스팅에 조금 확장하고 싶습니다.

    희망 내 첫 번째 게시물에 논외 않을거야,하지만 일부 응답자는 잘못을 가지고있는 것 같습니다 나는 문자열 정수의 캐스팅에 조금 확장하고 싶습니다.

    이 쿼리의 식을 산술 연산자 (더하기 기호 +)를 사용하기 때문에, MySQL은 숫자로 표현에서 모든 문자열을 변환합니다.

    설명하기 위해, 다음은 결과 (6)를 생성합니다 :

    SELECT ' 05.05 '+'.95';
    

    MySQL의에서 문자열 연결은 CONCAT () 함수를 필요로하므로이 여기에 모호함이 없으며 MySQL이 수레에 문자열을 변환하고 함께 추가합니다.

    나는 실제로 $ 포인트 변수는 사용자의 현재 지점 사실 세트에 없었기 때문에 초기 쿼리가 작동하지 않는 이유는 대부분 생각합니다. 이 중 하나를 제로로 설정하거나 해제 하였다 : MySQL은 제로에 빈 문자열을 캐스팅합니다. 그림를 들어, 다음은 0을 반환합니다 :

    SELECT ABS('');
    

    내가 말했듯이, 나는 너무 주제에서 벗어난 것 아니에요 바랍니다. 나는 Daan과 토마스는이 특정 문제에 대한 최상의 솔루션가 있음을 동의합니다.

  4. ==============================

    4.

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

    5.또한,이 "증가"문자열 때 업데이트를 사용 CONCAT

    또한,이 "증가"문자열 때 업데이트를 사용 CONCAT

    update dbo.test set foo=CONCAT(foo, 'bar') where 1=1
    
  6. ==============================

    6.누가 업데이트 문자열과 숫자에 필요 SET @a = 0; 업데이트 obj_disposition SET CODE = CONCAT ( 'CD_'@a = @ 2 + 1);

    누가 업데이트 문자열과 숫자에 필요 SET @a = 0; 업데이트 obj_disposition SET CODE = CONCAT ( 'CD_'@a = @ 2 + 1);

  7. ==============================

    7.당신은 SQL 주입 위험을 방지하기 위해 PDO를 사용해야합니다.

    당신은 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에 대한 필요가 점수를 얻을 수 있습니다. 당신은 업데이트 쿼리 (포인트 = 포인트 + 1)에 직접적으로 증가 할 수 있습니다.

    (참고 : 또한, 당신이 다른 사용자가 업데이트되면 데이터와 값을 변경 할 수 있습니다 첫 번째를 선택해야하기 때문에 PHP로 값을 증가하는 좋은 아이디어가 아니다.)

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

    8.'에서 점을 제거합니다 :

    '에서 점을 제거합니다 :

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

    당신은 원래 쿼리 문자열에 정수 값을 "캐스팅"은 ...

  9. ==============================

    9.왜 PHP가 일을 못하게합니까?

    왜 PHP가 일을 못하게합니까?

    "UPDATE member_profile SET points= ' ". ($points+1) ." '  WHERE user_id = '".$userid."'"
    
  10. from https://stackoverflow.com/questions/2259155/increment-value-in-mysql-update-query by cc-by-sa and MIT license