Intereting Posts
Класс Autoload с соглашением об именах на основе Zend или вообще не согласуется с Symfony 2 Как преобразовать веб-приложение php в настольное приложение и сохранить базу данных IMAP – кодирование UTF-8 Неопределенная переменная – У операторов switch есть область действия в PHP php zend gdata – Получить список документов Google, используя oauth PHP Random String Generator без повторений Только замените собственный URL веб-сайта в тексте с помощью HTML-ссылок Лучший способ передать массив между PHP и Javascript Рекомендации по локализации PHP? GetText? используя функцию PHP, но не указав параметры Динамически получать имена столбцов в $ aColumns arrary в datatables Получить данные из базы массива по значению в этом массиве Как использовать переменные PHP в качестве значений тега <script> при рендеринге кода jQuery в представлении CakePHP? Получить данные из URL-адреса Альтернативы apache_get_modules () для получения списка загруженных модулей apache

PDO: передать функцию MySQL для bindValue / bindParam

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

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

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

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


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

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

Подготовьте время, когда RDBMS выполняет проверку синтаксиса, а также проверку ссылок. Он должен дать ошибку, если вы называете таблицу, которая не существует, или вызвать функцию, которая не существует.

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

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

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

 $sthandler->bindValue(1, date('c'));