当使用 DBI 启用 SQL 跟踪时,如何防止语句被多次输出?
How can I prevent statements from being output multiple times when SQL tracing is enabled with DBI?
像这样使用 DBI
I enable trace 连接到 MySQL 数据库后
$dbh->trace('SQL|DBD');
然后我的 SQL 查询被打印两次:
>count_params statement SELECT table1.ID ID, table1.LinkID LinkID, Link.ID Link_ID FROM `table1` `table1` JOIN `table2` `Link` ON `table1`.`LinkID` = `Link`.`ID` WHERE table1.ID = ?
>parse_params statement SELECT table1.ID ID, table1.LinkID LinkID, Link.ID Link_ID FROM `table1` `table1` JOIN `table2` `Link` ON `table1`.`LinkID` = `Link`.`ID` WHERE table1.ID = ?
如何只打印每个执行的 SQL 语句一次?
How can I print every executed SQL statement only once?
你不能。 count_params
和 parse_params
是 DBD::mysql 用来在客户端模拟准备好的语句的内部函数。当您执行准备好的语句时,两者都会被调用。
count_params
在准备好包含以下内容的语句时调用:
if (DBIc_DBISTATE(imp_xxh)->debug >= 2)
PerlIO_printf(DBIc_LOGPIO(imp_xxh), ">count_params statement %s\n", statement);
parse_params
在执行语句时调用,包含以下内容:
if (DBIc_DBISTATE(imp_xxh)->debug >= 2)
PerlIO_printf(DBIc_LOGPIO(imp_xxh), ">parse_params statement %s\n", statement);
两者的逻辑是一样的,要么全有要么全无。
像这样使用 DBI
I enable trace 连接到 MySQL 数据库后
$dbh->trace('SQL|DBD');
然后我的 SQL 查询被打印两次:
>count_params statement SELECT table1.ID ID, table1.LinkID LinkID, Link.ID Link_ID FROM `table1` `table1` JOIN `table2` `Link` ON `table1`.`LinkID` = `Link`.`ID` WHERE table1.ID = ?
>parse_params statement SELECT table1.ID ID, table1.LinkID LinkID, Link.ID Link_ID FROM `table1` `table1` JOIN `table2` `Link` ON `table1`.`LinkID` = `Link`.`ID` WHERE table1.ID = ?
如何只打印每个执行的 SQL 语句一次?
How can I print every executed SQL statement only once?
你不能。 count_params
和 parse_params
是 DBD::mysql 用来在客户端模拟准备好的语句的内部函数。当您执行准备好的语句时,两者都会被调用。
count_params
在准备好包含以下内容的语句时调用:
if (DBIc_DBISTATE(imp_xxh)->debug >= 2)
PerlIO_printf(DBIc_LOGPIO(imp_xxh), ">count_params statement %s\n", statement);
parse_params
在执行语句时调用,包含以下内容:
if (DBIc_DBISTATE(imp_xxh)->debug >= 2)
PerlIO_printf(DBIc_LOGPIO(imp_xxh), ">parse_params statement %s\n", statement);
两者的逻辑是一样的,要么全有要么全无。