Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过SQL数据库在PHP中不能按订单?_Php_Mysql_Sql - Fatal编程技术网

通过SQL数据库在PHP中不能按订单?

通过SQL数据库在PHP中不能按订单?,php,mysql,sql,Php,Mysql,Sql,我正在开发一款游戏,试图在商店里按“物品级别”订购。它应该是正确的,因为此代码 ini_set('display_errors', 'On'); error_reporting(E_ALL | E_STRICT) 不显示任何错误。 这是按项目级别行排序的顺序 $item = mysql_query("SELECT * FROM knightG_{$shop["ItemCategory"]}s WHERE ItemId='{$shop["ItemId"]}' ORDER BY ItemLev

我正在开发一款游戏,试图在商店里按“物品级别”订购。它应该是正确的,因为此代码

ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT)
不显示任何错误。 这是按项目级别行排序的顺序

$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,并使用带有占位符的准备语句将inut值绑定到。这将不会解决列或表名称标识符中的输入参数问题(这里是第一个输入替换)

不过,您应该确保您的变量不受mysql注入的影响


我还建议您使用mysql扩展,而不是mysql扩展。已弃用。

{$shop[“ItemCategory”]}
必须有单引号而不是双引号,即使使用这些与错误报告相关的设置,mysql错误也不会显示。您的代码易受mysql注入的攻击。此外,PHP中的
mysql\uuz
函数已被弃用,不应再使用:。遗憾的是,按照您所做的设置
display\u errors
error\u reporting
仍然不会显示语法分析器错误,这就是您在这里看到的(@VMai的答案应该可以解决您的问题)。但是,解析器错误确实会显示在PHP错误日志中(如果您使用Apache并且没有单独的PHP错误日志,则会显示在Apache错误日志中),或者如果您尝试从命令行运行代码,则会显示在Apache错误日志中。更好的方法是使用诸如Aptana Studio或NetBeans之类的IDE,它们将为您捕获解析器错误。真正地现在!不能省略引号,但要使用另一种(单引号)。@Cthulhu事实上答案是正确的……双引号字符串中的数组值可以选择引号(这使得在字符串中使用数组值更方便)。我相信它们只有在没有花括号的情况下才是可选的。按原样,代码应该会产生警告(未定义常量)。@Cthulhu是的,我看到它们有点晚了,只是在编辑我的答案。不幸的是,这不起作用。为什么MYSQLI不起作用?(我不是说它是好是坏,只是一个问题)我只是更喜欢它:)如果你确信你会一直使用mysql,那么mysqli也是一个不错的选择。
$sql = "SELECT * FROM knightG_{$shop['ItemCategory']}s";
$sql.= " WHERE  ItemId='".$shop["ItemId"]."'";
$sql.= " ORDER BY ItemLevel ASC";
$item = mysql_query($sql) or die (mysql_error());