У меня небольшая проблема с функцией 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?
В качестве ссылки php.net вы обнаружили состояния, вы не можете использовать переменные связывания для идентификаторов. Вам понадобится обходной путь. mysql_real_escape_char
, безусловно, будет одним из способов.