我遇到了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子句?
答案 0 :(得分:0)
当您找到状态的php.net链接时,您不能将绑定变量用于标识符。你需要一个解决方法。 mysql_real_escape_char
肯定是单向的。