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

时间:2014-08-04 11:23:29

标签: 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());

如果需要,我可以提供更多信息。 感谢。

2 个答案:

答案 0 :(得分:2)

应该是

$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值绑定到。这不会处理列或表名称的标识符中的输入参数问题(这里是第一个输入替换)。

答案 1 :(得分:0)

$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());

你应该确保你的变量不受mysql注射的影响。

另外我建议使用PDO而不是mysql扩展名。它已被弃用。