PHP语句中的SQL变量

PHP语句中的SQL变量,php,mysql,Php,Mysql,我的代码: $sql = "SET @row_number = 0; SELECT (@row_number:=@row_number + 1) AS num, player, reinforcees, reinforcers FROM _KoT_villages WHERE o = '".$data[2]."' OR o = '".$data[4]."' ORDER BY CASE WHEN player = '".$user_class->id."' THEN 1 ELSE 2 EN

我的代码:

 $sql = "SET @row_number = 0; SELECT (@row_number:=@row_number + 1) AS num, player, reinforcees, reinforcers FROM _KoT_villages WHERE o = '".$data[2]."' OR o = '".$data[4]."' ORDER BY CASE WHEN player = '".$user_class->id."' THEN 1 ELSE 2 END";
    $result = mysql_query($sql) or die(mysql_error());
错误:

您的SQL语法有错误;检查手册 对应于要使用的正确语法的MariaDB服务器版本 “选择(@row\u number:=@row\u number+1)作为num,player, 加强件,第1行的加强件F'

当我回显SQL语句时,我得到以下结果:
SET@row\u number=0;选择(@row_number:=@row_number+1)作为num、player、加强物、来自_KoT_村庄的加强物,其中o='1'或o='5'在player='2'时按大小写顺序,然后1其他2结束

当我通过phpMyAdmin运行
echo
d语句时,它成功运行,并给出了一行行结果

但是为什么它不能在PHP语句中工作呢?发生什么事?如何让PHP做SQL正在做的事情

在有人说我自己还没有试图找到答案之前,如果你在谷歌上搜索“sql变量”php站点:stackoverflow.com,我发现的每个问题都是关于在php中访问sql结果(即循环)或在sql中插入php变量,这不是我需要的。我试图在SQL语句中插入一个SQL变量


另外:我意识到我应该停止使用MySQL,并且正在转换过程中,但是为了快速解决一个bug…我正在使用MySQL。

php中的MySQL客户端需要单独的语句

开放式MySQL客户端

第一项声明:

SET @row_number = 0
SELECT
   (@row_number:=@row_number + 1) AS num,
   player,
   reinforcees,
   reinforcers
FROM
   _KoT_villages 
WHERE
   o = '".$data[2]."'
   OR o = '".$data[4]."'
ORDER BY
    CASE WHEN player = '".$user_class->id."' THEN 1
    ELSE 2 
    END

$result = mysql_query( [2nd Statement] ) or die(mysql_error());
第二项声明:

SET @row_number = 0
SELECT
   (@row_number:=@row_number + 1) AS num,
   player,
   reinforcees,
   reinforcers
FROM
   _KoT_villages 
WHERE
   o = '".$data[2]."'
   OR o = '".$data[4]."'
ORDER BY
    CASE WHEN player = '".$user_class->id."' THEN 1
    ELSE 2 
    END

$result = mysql_query( [2nd Statement] ) or die(mysql_error());

关闭MySQL客户端

MySQL\u查询
不支持一次调用多个查询。您需要升级到
mysqli
PDO
才能启用该功能。同时,您可以使用
交叉连接来初始化
行号
变量,例如

$sql = "SELECT (@row_number:=@row_number + 1) AS num, player, reinforcees, reinforcers 
        FROM _KoT_villages 
        CROSS JOIN (SELECT @row_number := 0) r
        WHERE o = '".$data[2]."' OR o = '".$data[4]."' 
        ORDER BY CASE WHEN player = '".$user_class->id."' THEN 1 ELSE 2 END";

您需要使用支持MySQL多个查询的东西,例如或。