php - 无法通过 SQL 数据库在 PHP 中订购?

标签 php mysql sql

我正在尝试在我目前正在开发的游戏中按“ItemLevel”在商店中订购。它应该是正确的,因为这段代码

ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT)

显示没有错误。 这是 ORDER BY ItemLevel 行。

$item = mysql_query("SELECT * FROM knightG_{$shop["ItemCategory"]}s WHERE  
ItemId='{$shop["ItemId"]}' ORDER BY ItemLevel ASC") or die (mysql_error());

如果需要,我可以向任何人提供更多信息。 谢谢。

最佳答案

应该是

$item = mysql_query("SELECT * FROM knightG_{$shop['ItemCategory']}s WHERE  
ItemId='{$shop['ItemId']}' ORDER BY ItemLevel ASC") or die (mysql_error());

相反。在双字符串变量插值内部,您必须省略数组索引周围的引号。

如果在字符串中使用大括号包围数组允许常量,则这是无效的,因此您必须在您的情况下使用单引号。这可能看起来很奇怪,但它是有效的。

更好的方法是从已弃用的 mysql_* 函数转移到 PDO 或 mysqli,并使用带有占位符的准备好的语句来绑定(bind) inut 值。这不会解决列或表名称的标识符中的输入参数问题(此处的第一个输入替换)。

关于php - 无法通过 SQL 数据库在 PHP 中订购?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25117529/

相关文章:

php - 如何阻止 Symfony 记录 Doctrine 的 sql 查询?

php - Ajax 从 Mysql 检索数据 - 无法正常工作

mysql - 更新 sql 查询 where select max

MySql 选择资格有效期

MySQL 如何在任何 15 分钟的窗口中总结过多的交易量?

sql - 如何在不访问显示计划的情况下优化 SQL 查询?

php - 如何构建 MySQL OR?

php - PHP 获取时带有重音符号的 MySql UTF8 归类数据无法正确显示

php - Laravel/SQL 按流行度/趋势排序

sql - 标准 SQL bool 运算符 IS 与等于 (=) 运算符