Есть ли способ получить запрос, который использовался для создания объекта утверждения PDO Prepared?
Получить запрос из подготовленного отчета PDO
Ответ 1
Попробуйте $statement- > queryString.
Ответ 2
Если вы не возражаете против расширения объекта по умолчанию \PDO и\PDOStatement, вы можете рассмотреть:
github.com/noahheck/E_PDOStatement
Это расширение PDO позволяет вам увидеть полный запрос запроса в качестве примера того, что может быть выполнено на уровне базы данных. Он использует regex для интерполирования связанных параметров вашего оператора PDO.
Расширяя определение по умолчанию \PDOStatement, E_PDOStatement может предложить это усовершенствование по умолчанию, не требуя изменения вашего нормального рабочего потока.
Отказ от ответственности: я создал это расширение.
Я просто надеюсь, что это поможет кому-то еще.
Ответ 3
Самореклама: https://github.com/ellisgl/GeekLab-GLPDO2 Вы можете вывести ожидаемый запрос с помощью метода отладки. Я обновлял это недавно.
Ответ 4
Эта процедура работает. Так как 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;
Надеюсь это поможет.