我的代码:
$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());
错误:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT (@row_number:=@row_number + 1) AS num, player, reinforcees, reinforcers F' at line 1
当我回显 SQL 语句时,我得到以下信息:SET @row_number = 0; SELECT (@row_number:=@row_number + 1) AS num, 玩家, 增援部队, 增援部队 FROM _KoT_villages WHERE o = '1' OR o = '5' 按情况排序 WHEN player = '2' THEN 1 ELSE 2 END
当我通过 phpMyAdmin 运行该 echo
d 语句时,它成功运行,并给出了几行结果。
但是为什么它在 PHP 语句中不起作用?这是怎么回事?如何让 PHP 执行 SQL 正在执行的操作?
在有人说我没有尝试自己找到答案之前,如果你谷歌“sql变量”php site:stackoverflow.com
,我发现的每个问题都是关于在PHP中访问SQL结果(即循环)或在 SQL 中插入 PHP 变量,这不是我需要的。我正在尝试将 SQL 变量插入到 SQL 语句中。
另外:我意识到我应该停止使用 MySQL,并且正在转换,但为了快速解决错误......我正在使用 MySQL。
最佳答案
mysql_query
不支持一次调用中的多个查询。您需要升级到 mysqli
或 PDO
才能启用该功能。与此同时,您可以使用CROSS JOIN
在单个查询中实现您想要的内容来初始化row_number
变量,例如
$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";
关于php - PHP 语句中的 SQL 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53975366/