Как я могу распечатать SQL-запрос, выполняемый после того, как DBI Perl заполнит заполнителей?

Я использую модуль Perl DBI. Я готовлю оператор с помощью заполнителей, затем выполняю запрос.

Действительно ли возможно распечатать заключительный запрос, который выполнялся, вручную не выходя из параметров и бросая их в заполнителей?

Спасибо

17
задан Ωmega 20 October 2019 в 14:44
поделиться

3 ответа

См. Трассировка в DBI . Следующее работает с использованием DBD :: SQLite , но дает много вывода:

$dbh->trace($dbh->parse_trace_flags('SQL|1|test'));

Вывод:

<- prepare ('SELECT ... FROM ... WHERE ... =?') = DBI :: st = HASH (0x21ee924) в строке 213 booklet-excel.pl

<- execute ('Inhaler') = '0E0' в строке 215 booklet-excel.pl

и т. Д.

Вы можете подключить свой собственный фильтр к потоку трассировки , чтобы оставить только prepare s.

16
ответ дан 30 November 2019 в 11:32
поделиться

Для большинства запросов самая простая отладка должна использовать следующее...

  • , Если Вы готовите и выполняете отдельного оператора с помощью do метод, используйте:

    use feature 'say';
    say $dbh->{Statement};
    
  • , Если Вы используете prepare и execute методы отдельно, используйте:

    use feature 'say';
    use Data::Dumper;
    say $sth->{Statement};
    say Dumper($sth->{ParamValues});
    
0
ответ дан 30 November 2019 в 11:32
поделиться

Не в общем, потому что DBI не обязательно производит такой запрос. Если ваша база данных поддерживает подготовленные операторы и заполнители в своем API, DBI передаст их и позволит базе данных выполнять работу, что является одной из причин использования подготовленных операторов.

10
ответ дан 30 November 2019 в 11:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: