Можно ли вставлять функции 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'));