Получить запрос обратно из подготовленного оператора PDO - PullRequest
48 голосов
/ 11 февраля 2010

Есть ли способ получить запрос, который использовался для создания объекта оператора PDO Prepared?

Ответы [ 4 ]

33 голосов
/ 11 февраля 2010

Попробуйте $ Statement-> queryString .

10 голосов
/ 16 мая 2014

Если вы не против расширения объекта \ PDO и \ PDOStatement по умолчанию, вы можете рассмотреть вопрос:

github.com / noahheck / E_PDOStatement

Это расширение для PDO позволяет вам видеть полный оператор запроса в качестве примера того, что может быть выполнено на уровне базы данных. Он использует регулярное выражение для интерполяции связанных параметров вашего оператора PDO.

Расширяя определение по умолчанию \ PDOStatement, E_PDOStatement может предложить это улучшение функциональности по умолчанию, не требуя изменения вашего обычного рабочего процесса.

Отказ от ответственности: я создал это расширение.

Я просто надеюсь, что это поможет кому-то еще.

0 голосов
/ 14 октября 2018

Эта процедура работает. Так как debugDumpParams () не возвращает вывод. Вот маленький трюк, который я разработал.

// get the output before debugDumpParams() get executed 
$before = ob_get_contents();

//start a new buffer
ob_start();

// dump params now
$smt->debugDumpParams();

// save the output in a new variable $data
$data = ob_get_contents();

// clean the output screen
ob_end_clean();

// display what was before debugDumpParams() got executed
printf("%s", $before);

$statement = "";

// Now for prepared statements
if (stristr($data, 'Sent SQL') !== false)
{

// begin extracting from "Sent SQL"
$begin = stristr($data, 'Sent SQL');

// get the first ] square bracket
$square = strpos($begin, "]");

// collect sql
$begin = substr($begin, $square + 1);
$ending = strpos($begin, "Params");

$sql = substr($begin, 0, $ending);
$sql = trim($sql);

  // sql statement here
  $statement = $sql;
}
else
{
  if (stristr($data, 'SQL') !== false)
  {
     $begin = stristr($data, 'SQL');
     // get the first ] square bracket
     $square = strpos($begin, "]");

     // collect sql
     $begin = substr($begin, $square + 1);
     $ending = strpos($begin, "Params");

     $sql = substr($begin, 0, $ending);
     $sql = trim($sql);

     $statement = $sql;
  }

}


// statement here
echo $statement;

Надеюсь, это поможет.

0 голосов
/ 03 мая 2017

Самореклама: https://github.com/ellisgl/GeekLab-GLPDO2 Вы можете вывести ожидаемый запрос с помощью метода отладки. Я обновлял это недавно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...