php - PHP 语句中的 SQL 变量

标签 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 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 运行该 echod 语句时,它成功运行,并给出了几行结果。

但是为什么它在 PHP 语句中不起作用?这是怎么回事?如何让 PHP 执行 SQL 正在执行的操作?

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

另外:我意识到我应该停止使用 MySQL,并且正在转换,但为了快速解决错误......我正在使用 MySQL。

最佳答案

mysql_query 不支持一次调用中的多个查询。您需要升级到 mysqliPDO 才能启用该功能。与此同时,您可以使用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/

相关文章:

PHP,SQL多表

php - UTF-8贯穿始终

php - 在php中使用MDB2将blob数据插入mysql

php - 在 Eclipse 中使用 XDebug 远程调试时,PHP 源文件是否需要在本地和远程存在?

mysql - 无法加载此类文件 -- mysql/mysql_api (LoadError)

python - MySql Connector (python) 和 SQLAlchemy Unicode 问题

MySQL FullText bool 模式 : searching keywords that contain '+' as part of the string

php - 删除文件扩展名的正确方法

更新后mysql触发器不起作用

mysql - 卸载mysqlm后,该命令仍然有效