@YourCommonSense ... почему?

я небольшая проблема с функцией подготовки mysqli_stmt. Вот мой запрос:

$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. Например, они разрешены в списке VALUES () оператора INSERT (чтобы указать значения столбца для строки) или в сравнении со столбцом в предложении WHERE, чтобы указать значение сравнения.

Однако они не допускаются для идентификаторов (таких как имена таблиц или столбцов), в списке выбора, в котором указаны столбцы, которые должны быть возвращены оператором SELECT, или для указания обоих операндов двоичного оператора, такого как знак = равно.

Есть ли способ обойти это, или я собираюсь использовать mysql_real_escape_char () для предложения ORDER BY?

Ответы на вопрос(1)

Решение Вопроса

которую вы нашли, указывает, вы не можете использовать переменные связывания для идентификаторов. Вам понадобится обходной путь.mysql_real_escape_char безусловно, будет одним из способов.

 tkrajcar30 сент. 2013 г., 18:12
@YourCommonSense ... почему?
 gprime20 янв. 2011 г., 17:20
Бах, да, я просто заставлю разработчика приложений использовать функции моего класса БД для установки этих атрибутов. Я хотел, чтобы mysqli подготовить операторы обрабатывать всю дезинфекцию пользовательского ввода.
 Your Common Sense29 сент. 2013 г., 23:27
Могу ли я попросить вас удалить этот ответ? Заранее спасибо.

Ваш ответ на вопрос