Как посмотреть запрос который был сформирован с помощью mysqli->prepare

sirantd

Новичок
Как посмотреть запрос который был сформирован с помощью mysqli->prepare

Добрый день

В целях debug хотелось бы увидеть как выглядит запрос который отправляется на сервер при работе с mysqli->prepare
Я понимаю, что в данном случае сначало отправляется только подготовленый запрос, а потом отдельно только переменные, но может есть какая-то возможность ? Если делать так:

PHP:
        $query = "INSERT INTO admins (login, fio, phone, note) VALUES (?, ?, ?, ?)";
        $stmt = $mysqli->prepare($query);
        $stmt->bind_param('ssss', $_POST['login'], $_POST['fio'], $_POST['phone'], $_POST['note']);
        if (!$stmt->execute()) {error("Ошибка SQL","Ошибка при выполнении запроса: ".$query."\n".$stmt->error);}
        $stmt->close();
То я увижу "INSERT INTO admins (login, fio, phone, note) VALUES (?, ?, ?, ?)" в дебаге, а хотелось бы видеть и какие значения были внутри запроса если он невыполнился...
 

Фанат

oncle terrible
Команда форума
какое-то время назад здесь задавали этот самый вопрос, и вразумительного ответа, насколько я помню, никто не дал.
И это удивляет, но, в принципе, может быть объяснимо
 

camka

не самка
sirantd
никак.

Изучите технологию работы prepared statements. После вызова prepare объекту больше не нужен текст самого запроса. Поэтому, он его, скорее всего, даже и не хранит, ему достаточно лишь ссылки на подготовленное выражение, возвращенной сервером, посредством которого он в дальнейшем и общается с сервером, когда передает аргументы или посылает команду на выполнение.

Итоговый запрос можно посмотреть или в логах сервера, или построив свою обертку для mysqli.
 

sirantd

Новичок
Да я в принципе понимаю как оно работает, но думал что как раз для целей debug они эту обертку в mysqli сами оставили :)

Ну да ладно, что нибудь придумаю.

Спасибо за ответ.
 

camka

не самка
zerkms
Которая будет сохранять текст запроса во внутренних свойствах объекта с целью отладки.

-~{}~ 21.12.06 13:28:

Кстати, а наследовать свой класс от mysqli_stmt и не получится. Точнее, не получится возвращать объект этого класса из mysqli_prepare, даже если делать это из самописного класса, наследованного от mysqli

Иными словами - никак не удасться изменить тип, возвращаемый mysqli_prepare с mysqli_stmt на свой, даже если и наследованный от mysqli_stmt.

Или кто-то знает решение?
 
Сверху