PDO: передать функцию MySQL в bindValue / bindParam - PullRequest
8 голосов
/ 02 января 2012

Можно ли вставить функции MySQL, используя bindValue()?Мой код ниже просто выводится в виде строки 'NOW()' вместо функции NOW() (без кавычек).

$sthandler->bindValue(1, 'NOW()');

Ответы [ 2 ]

10 голосов
/ 02 января 2012

Нет.Параметр запроса заменяет только одно постоянное значение.Например, числовая константа или буквенная строка или дата.

Все остальное - имена столбцов, имена таблиц, ключевые слова SQL, функции, выражения - должно быть в строке SQL во время анализа.


Ваш комментарий:

Вы должны понимать, что параметры не просто удобство для вставки дополнительных строк в ваш SQL.PREPARE аналогичен фазе компиляции для Java или C #, тогда как EXECUTE аналогичен выполнению скомпилированного кода.

Время подготовки - это когда СУБД выполняет проверку синтаксиса, а также проверку ссылок.Он должен выдавать ошибку, если вы называете таблицу, которая не существует, или вызываете функцию, которая не существует.

Вы не можете передавать имена таблиц или вызовы функций в качестве параметров, потому что тогда СУБД не будетне сможет проверить эти ссылки во время подготовки.Вы не должны иметь возможность использовать параметр запроса для изменения синтаксиса оператора или для введения недопустимых таблиц или функций.

Таким образом, заполнитель параметра должен быть неприводимым синтаксическим элементом, который никогда не является недопустимой ссылкой, т.е.одно буквальное значение - число или строка.

7 голосов
/ 02 января 2012

Нет, поскольку заполнители в подготовленных выражениях автоматически экранируются.Таким образом, в вашем случае он увидит, что это строка, и (по крайней мере) поместит ее в кавычки 'NOW()'.Теперь это просто строка для mysql и для mysql.Вы можете установить текущую дату и время, используя PHP

$sthandler->bindValue(1, date('c'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...