Вы говорите это:
Я никогда не вижу окончательный запрос, так как
отправлено в базу данных
Ну, на самом деле, при использовании подготовленных операторов, не существует такой вещи, как " конечный запрос " :
- Сначала заявление отправляется в БД и там готовится
- База данных анализирует запрос и создает его внутреннее представление
- И, когда вы связываете переменные и выполняете оператор, в базу данных отправляются только переменные
- И база данных «внедряет» значения во внутреннее представление оператора
Итак, чтобы ответить на ваш вопрос:
Есть ли способ захвата полного
SQL-запрос, отправленный PDO в базу данных
и записать его в файл?
Нет: поскольку нигде нет " завершенного запроса SQL ", его невозможно перехватить.
Лучшее, что вы можете сделать для целей отладки, - это «восстановить» «настоящий» SQL-запрос, введя значения в строку SQL оператора.
Что я обычно делаю в таких ситуациях:
- эхо-код SQL, соответствующий инструкции, с заполнителями
- и используйте
var_dump
(или эквивалент) сразу после, чтобы отобразить значения параметров
- Обычно этого достаточно, чтобы увидеть возможную ошибку, даже если у вас нет «реального» запроса, который вы можете выполнить.
Это не очень хорошо, когда дело доходит до отладки, но это цена готовых утверждений и преимуществ, которые они приносят.