gpr*_*ime 5 php mysqli prepared-statement
我在使用 mysqli_stmt 准备函数时遇到一个小问题。这是我的查询:
$params = array(
"sisi",
"some_string",
5000,
"date_added DESC"
);
$sql = "SELECT *
FROM scenes
WHERE scene_title LIKE ?
AND scene_id > ?
ORDER BY ?
LIMIT ?";
Run Code Online (Sandbox Code Playgroud)
现在,当我像这样将参数绑定到数组时(我实例化了一个有效的 mysqli_stmt 对象):
call_user_func_array(array($this->mysql_stmt, 'bind_param'), $params);
Run Code Online (Sandbox Code Playgroud)
订单依据不受约束。我在 php.net 上阅读(https://www.php.net/manual/en/mysqli.prepare.php)
这些标记仅在 SQL 语句中的某些位置是合法的。例如,它们可以出现在 INSERT 语句的 VALUES() 列表中(以指定行的列值),或者可以出现在与 WHERE 子句中的列的比较中以指定比较值。
但是,它们不允许用于标识符(例如表名或列名)、命名要由 SELECT 语句返回的列的选择列表中,也不允许指定二元运算符的两个操作数(例如 = 等号)。
有没有办法解决这个问题,或者我是否必须使用 mysql_real_escape_char() 作为 ORDER BY 子句?
正如您找到的 php.net 链接所述,您不能使用绑定变量作为标识符。你需要一个解决方法。mysql_real_escape_char肯定是一种方式。