我试图通过我正在开发的游戏中的商店中的“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());
如果需要,我可以提供更多信息。 感谢。
答案 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扩展名。它已被弃用。