Отладка PDO – просмотр запроса ПОСЛЕ привязки?

Возможный дубликат:
Получить (или смоделировать) полный запрос из подготовленного оператора PDO

Я не могу понять, почему мой запрос возвращает 0 строк .. он реализует некоторые очень динамические функции поиска и множество операторов if / loop и т. Д. Поэтому для его отладки я хотел бы ТОЧНО видеть, какая строка отправляется к серверу. Есть ли способ сделать это через PHP?

Может быть, есть способ спросить сервер «что такое последний запрос» или сообщить PDO «показать мне, что вы отправили»?

Я видел один ответ с использованием str_replace чтобы вручную вводить значения вместо :fieldValue , но это, вероятно, синтаксическая проблема (или, может быть, это неправильный цикл и т. Д.), С которым этот метод не помогает.

Использование bindValue(":fieldValue", $value); если это имеет значение.

РЕДАКТИРОВАТЬ

Оказывается, это было просто if ($var="true") { ... которое должно было быть, if ($var=="true") { ... PHP Я думаю, это не то же самое, что Java в этом смысле? В любом случае, этот вопрос все еще стоит (поскольку я часто сталкиваюсь с этим). Мне пришлось использовать серию echo "You are Here"; чтобы найти эту ошибку, поскольку она была технически обоснованной, но не правильной. Если бы у меня был последний оператор SQL, я мог бы увидеть «О, мой код добавил, where column = true , должно быть, прошел неправильный IF …».

Solutions Collecting From Web of "Отладка PDO – просмотр запроса ПОСЛЕ привязки?"

Это самый распространенный миф об отладке SQL. «Мне нужно увидеть запрос после подготовки, чтобы узнать, произошла ли ошибка». Дело в том, что нет , и я скажу вам, почему.

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

Кроме того, если вы правильно настроите PDO, вы получите подробное описание PDOException котором подробно описывается ошибка, с которой вы столкнулись, и полная обратная связь, где произошла ошибка, плюс вы получаете строку ошибок из MySQL, что очень упрощает синтаксические ошибки найти.

Чтобы включить исключения PDO и отключить эмулированные подготавливает:

 $pdo = new PDO("mysql:host=localhost;dbname=database_name", "user", "password"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);