Прежде, чем переместиться в PDO, я создал SQL-запросы в PHP путем конкатенации строк. Если бы я получил синтаксическую ошибку базы данных, то я мог бы просто повторить заключительную строку SQL-запроса, попробовать ее сам на базе данных и настроить ее, пока я не зафиксировал ошибку, то отложенный это в код.
Подготовленные операторы PDO быстрее и лучше и более безопасны, но одна вещь беспокоит меня: Я никогда не вижу заключительного запроса, когда он отправляется в базу данных. Когда я получаю ошибки о синтаксисе в моем журнале Apache или моем пользовательском файле журнала (я регистрирую ошибки внутри a catch
блок), я не вижу запроса, который вызвал их.
Существует ли путь, получают полный SQL-запрос, отправленный PDO в базу данных, и регистрируют его в файл?
Хотя Паскаль МАРТИН верен, PDO не отправляет полный запрос в базу данных все сразу же предложение ryeguy использовать функцию ведения журнала БД фактически позволило мне увидеть полный запрос, собранный и выполненный базой данных.
Вот как: (Эти инструкции предназначены для MySQL на компьютере под управлением Windows - ваш опыт может отличаться)
my.ini
в разделе [mysqld]
добавьте команду log
, например log = "C: \ Program Files \ MySQL \ MySQL Server 5.1 \ data \ mysql.log"
Этот файл будет быстро расти, поэтому обязательно удалите его и отключите ведение журнала, когда закончите тестирование.
№. Запросы PDO не подготавливаются на стороне клиента. PDO просто отправляет SQL-запрос и параметры на сервер базы данных. База данных - это то, что делает подстановка (из ?
). У вас есть два варианта:
Вы говорите следующее:
Я никогда не вижу окончательного запроса, поскольку он отправлен в базу данных
Ну, на самом деле, при использовании подготовленных операторов не существует такой вещи, как " final query «:
Итак, чтобы ответить на ваш вопрос:
Есть ли способ захватить полный SQL-запрос, отправленный PDO в базу данных , и записать его в файл?
Нет: поскольку нигде нет « полного SQL-запроса », нет возможности его захватить.
Лучшее, что вы можете сделать для целей отладки, - это «воссоздать» «настоящий» SQL-запрос, вставив значения в строку SQL оператора.
В подобных ситуациях я обычно делаю следующее:
var_dump
(или эквивалент) сразу после этого, чтобы отобразить значения параметров Это не очень хорошо, когда дело доходит до отладки - но это цена подготовленных операторов и те преимущества, которые они приносят.