Search code examples
mysqlsqlperlprepared-statementdbi

How can I print the SQL query executed after Perl's DBI fills in the placeholders?


I'm using Perl's DBI module. I prepare a statement using placeholders, then execute the query.

Is it possible to print out the final query that was executed without manually escaping the parameters and dropping them into the placeholders?

Thanks


Solution

  • See Tracing in DBI. The following works using DBD::SQLite but produces a lot of output:

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

    Output:

    <- prepare('SELECT ... FROM ... WHERE ... = ?')= DBI::st=HASH(0x21ee924) at booklet-excel.pl line 213

    <- execute('Inhaler')= '0E0' at booklet-excel.pl line 215

    etc etc.

    You could plug your own filter in to the trace stream to only keep prepares.