22.08.2016 12:52:16
При работе с PDO потребовалось посмотреть запрос с уже подставленными в плейсхолдеры значениями.
Как не странно, но готового метода для этого не нашлось.

Готовый метод debugDumpParams не подходит, он просто выдает список параметров и сам запрос с плейсхолдерами, не подставляя значения.
В вариантах, найденных в интернете, в основном, предлагались варианты с расширением класса PDO. Вариант не плохой, но довольно громоздкий. Также он не удобен, если работаете с готовой библиотекой, не руками же менять в ней все обращения к PDO, на отладочный класс, да и нужно это только для отладки, а не всегда.

И вот был найден более подходящий вариант с использованием SHOW PROFILES.
Сама идея:

  • Выполняем SQL команду SET profiling=1
  • Выполняем нужный запрос
  • Выполняем SHOW PROFILES

Вариант реализации:

 
  $oDB->setQuery('SET profiling=1');
  $oDB->query();

  $oDB->setQuery('SELECT * FROM tblTest_1 WHERE id=:id');
  $oDB->setBinds(array('id' => "1 AND '1=2 '\'/'--"));
  $aRows = $oDB->loadObjectsList();

  $oDB->setQuery('SHOW PROFILES');
  echo '<pre>';
    print_r($oDB->loadObjectsList());
  echo '</pre>';


Тэги: PHP

Яндекс.Метрика