我在使用mysqli_stmt prepare函数时遇到了一些小问题。以下是我的查询代码:
$params = array(
"sisi",
"some_string",
5000,
"date_added DESC"
);
$sql = "SELECT *
FROM scenes
WHERE scene_title LIKE ?
AND scene_id > ?
ORDER BY ?
LIMIT ?";
现在,当我像这样将参数绑定到数组中时(我已经实例化了一个有效的mysqli_stmt对象):
call_user_func_array(array($this->mysql_stmt, 'bind_param'), $params);
排序语句不是绑定的。我在php.net上读到 (http://ca3.php.net/manual/en/mysqli.prepare.php)。
引用: 标记仅在SQL语句中的某些位置上合法。例如,它们允许在INSERT语句的VALUES()列表中(为行指定列值),或在WHERE子句中与列进行比较以指定比较值时使用。 然而,在标识符(如表或列名称)中,用于命名由SELECT语句返回的列的选择列表中,或用于指定二元运算符(如等号=)的两个操作数时,它们是不允许的。
有没有办法规避这个问题,或者我必须在ORDER BY子句中使用mysql_real_escape_char()?