Подтвердить что ты не робот

Отладка 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...".

4b9b3361

Ответ 1

Это самый распространенный миф о 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);