2014-07-25 9 views
1

PHP에서 PDO를 사용하여 쿼리를 실행하려고합니다. $ sql에서 SET @var를 사용할 때를 제외하고 쿼리는 순위를 결정하기 위해 맨 위에 몇 가지 변수가 있습니다. 빈 행 집합을 반환합니다. 그러나 문제가되는 SQL을 제거하면 괜찮습니다.PHP PDO - MySQL 변수 사용

내 스크립트에서 @prev_value, @rank_count 또는 @rank_increasing을 반환하고 싶지는 않으며 SELECT에서 만든 순위 만 반환합니다.

내가 잘못하고있는 것을 알려주시겠습니까?

감사

$sql = " 
    SET @prev_value = NULL; 
    SET @rank_count = 0; 
    SET @rank_increasing = 0; 
    SELECT a.* 
     , @rank_increasing := @rank_increasing + 1 AS row_num 
     , CASE 
      WHEN @prev_value = score 
       THEN @rank_count 
      WHEN @prev_value := score 
       THEN @rank_count := @rank_increasing 
      END AS rank 
     FROM ( 
      -- INLINE VIEW -- 
      ) a 
    "; 
    try { 
     $sth = $dbh->prepare($sql); 
     $sth->execute(array($var1, $var2)); 
     return $sth->fetchAll(PDO::FETCH_ASSOC); 
    } catch (Exception $e) { 
     return $e; 
    } 
+0

가능한 복제 [변수 MySQL의 스크립트를 실행하는 방법 PHP :: PDO를 사용하여?] (http://stackoverflow.com/questions/4683110/how-to-execute-mysql-script-w i-variables-using-phppdo) – doublesidedstickytape

답변

4

솔루션 여기 찾았 https://stackoverflow.com/a/4685040/1266457

를 해결하는 방법을 :) 감사합니다

// Prepare and execute the variables first 
$sql = " 
SET @prev_value = NULL; 
SET @rank_count = 0; 
SET @rank_increasing = 0; 
"; 
$sth = $dbh->prepare($sql); 
$sth->execute(); 

// Run the main query 
$sql = " 
SELECT a.* 
    , @rank_increasing := @rank_increasing + 1 AS row_num 
    , CASE 
     WHEN @prev_value = score 
      THEN @rank_count 
     WHEN @prev_value := score 
      THEN @rank_count := @rank_increasing 
     END AS rank 
    FROM ( 
     -- INLINE VIEW -- 
     ) a 
"; ... 
+0

나에게 비슷한 문제가 발생했습니다. 감사합니다. –

+0

동일한 쿼리 내에서 "집합"을 실행하면 오류가 발생하지만 분리하여 제대로 작동합니다. 왜냐하면 그것은 논리적 인 이유가 없습니다. 고마워,이게 문제를 해결해 줬어. –