Mysqli准备语句+绑定Order BY

5

我在使用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()?
1个回答

1

正如您找到的php.net链接所述,您不能使用绑定变量来标识符。您需要一个解决方法。mysql_real_escape_char肯定是一种方法。


啊,好吧,我就强制应用程序开发人员使用我的数据库类函数来设置这些属性。我想让mysqli prepare语句处理所有用户定义输入的过滤。 - gprime
请问您能否删除这个答案?非常感谢。 - Your Common Sense
2
@YourCommonSense ...为什么? - tkrajcar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接