当前位置: 首页 > 面试题库 >

PHP PDO-使用MySQL变量

凤高澹
2023-03-14
问题内容

我正在尝试使用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
"; ...


 类似资料:
  • 主要内容:1. 定义变量,2. 为变量赋值在 MySQL 中,除了支持标准的存储过程和函数外,还引入了表达式。表达式与其它高级语言的表达式一样,由变量、运算符和流程控制来构成。 变量是表达式语句中最基本的元素,可以用来临时存储数据。在存储过程和函数中都可以定义和使用变量。用户可以使用 DECLARE 关键字来定义变量,定义后可以为变量赋值。这些变量的作用范围是 BEGIN...END 程序段中。 下面将讲解如何定义变量和为变量赋值。 1.

  • 问题内容: 我正在尝试对MySQL 5.0中的变量进行一些简单的操作,但是我无法完全正常工作。我已经看到了很多(非常!)DECLARE / SET的不同语法,我不确定为什么……在任何情况下,我都可能会混淆它们/选择错误的语法/混合它们。 这是一个失败的最小片段: 我也尝试过使用BEGIN … END包装它;并作为一个程序。在这种情况下,MySQL Workbench会帮助我:第一行显示“’)’附近

  • 问题内容: 我需要在Hibernate中使用带有变量的本地SQL查询。 但是hibernate抛出错误信息:参数前缀后不允许有空格 因此,与:= mysql变量分配和hibernate变量分配存在冲突。 这是我的SQL查询: hibernate代码(jpa语法): 我无法使用存储过程,因为我的SQL查询是动态生成的(“ Level”可以是“ int”或“ force” …) 我怎样才能做到这一点

  • 我想在我的shell脚本中使用mysql语法和变量,我用错了什么? 我正在尝试将其作为./test.sh运行

  • 问题内容: 我正在尝试编写一个函数,该函数采用下面编写的函数中编写的变量,然后在 MySQL 查询中使用该变量。我在下面写了一个例子: 当我尝试运行该程序时,出现以下错误: 这是用于大学作业,必须使用格式来接收变量。我花了数小时在互联网上搜索,试图找到解决方案,请帮助:/ 问题答案:

  • 问题内容: 我想插入变量,并到我的桌前。现在,从我可以告诉我的所有信息中,我应该做的就是,下面是我所要做的,但是这根本不会在我的表中插入任何内容。如果我对应该写的内容进行硬编码(使用它将示例写到表中,那么到目前为止我的连接和语法正确)。任何帮助将不胜感激! 我也尝试过这个: 和: 问题答案: 您需要将SQL语句和参数作为单独的参数传递: 或使用可变参数语法(splat ) : 您的版本尝试传入包含