Mysqli准备语句+绑定顺序BY

时间:2011-01-19 23:05:56

标签: php mysqli prepared-statement

我遇到了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 ?";

现在当我将params绑定到这样的数组时(我有一个有效的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语句中的位置。例如,   它们被允许进入VALUES()列表   一个INSERT语句(指定   行的列值)或在   与WHERE中的列进行比较   用于指定比较值的子句。

     

但是,他们不被允许   标识符(例如表或列)   名称),在名称的选择列表中   SELECT返回的列   语句,或指定两个操作数   一个二元运算符,如=   等号。

有没有解决方法或者我将不得不使用mysql_real_escape_char()作为ORDER BY子句?

1 个答案:

答案 0 :(得分:0)

当您找到状态的php.net链接时,您不能将绑定变量用于标识符。你需要一个解决方法。 mysql_real_escape_char肯定是单向的。