簡體   English   中英

PHP PDO - 使用 MySQL 變量

[英]PHP PDO - Using MySQL Variables

我正在嘗試使用 PDO 在 PHP 中運行查詢。 查詢在頂部有一些變量來確定排名,除了在 $sql 中使用 SET @var 時,它返回一個空行集。 但是,如果我刪除了有問題的 SQL,它會返回正常。

我不想在我的腳本中返回 @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;
    }

在這里找到解決方案: 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
"; ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM