Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 当使用DBI启用SQL跟踪时,如何防止语句多次输出?_Mysql_Perl_Trace_Dbi - Fatal编程技术网

Mysql 当使用DBI启用SQL跟踪时,如何防止语句多次输出?

Mysql 当使用DBI启用SQL跟踪时,如何防止语句多次输出?,mysql,perl,trace,dbi,Mysql,Perl,Trace,Dbi,在使用以下命令连接到MySQL数据库之后 $dbh->trace('SQL|DBD'); 然后,我的SQL查询将打印两次: >count\u params语句从`table1``table1`JOIN`table2``Link`中选择table1.ID ID、table1.LinkID、Link.ID Link\u ID,其中table1.ID=? >parse_params语句选择table1.ID ID,table1.LinkID,Link.ID Link_ID,从'table1``

在使用以下命令连接到MySQL数据库之后

$dbh->trace('SQL|DBD');
然后,我的SQL查询将打印两次:

>count\u params语句从`table1``table1`JOIN`table2``Link`中选择table1.ID ID、table1.LinkID、Link.ID Link\u ID,其中table1.ID=?
>parse_params语句选择table1.ID ID,table1.LinkID,Link.ID Link_ID,从'table1``table1`JOIN`table2``Link`中选择'table1.ID`,LinkID`,其中table1.ID=?
如何只打印一次每个执行的SQL语句

如何只打印一次每个执行的SQL语句

你不能
count_params
parse_params
是DBD::mysql用来模拟客户端上准备好的语句的内部函数。当您执行准备好的语句时,这两个函数都会被调用

在准备语句并包含以下内容时调用:

if (DBIc_DBISTATE(imp_xxh)->debug >= 2)
  PerlIO_printf(DBIc_LOGPIO(imp_xxh), ">count_params statement %s\n", statement);
if (DBIc_DBISTATE(imp_xxh)->debug >= 2)
  PerlIO_printf(DBIc_LOGPIO(imp_xxh), ">parse_params statement %s\n", statement);
在执行语句时调用,并包含以下内容:

if (DBIc_DBISTATE(imp_xxh)->debug >= 2)
  PerlIO_printf(DBIc_LOGPIO(imp_xxh), ">count_params statement %s\n", statement);
if (DBIc_DBISTATE(imp_xxh)->debug >= 2)
  PerlIO_printf(DBIc_LOGPIO(imp_xxh), ">parse_params statement %s\n", statement);
两者的逻辑是一样的,所以要么全有,要么什么都没有

如何只打印一次每个执行的SQL语句

你不能
count_params
parse_params
是DBD::mysql用来模拟客户端上准备好的语句的内部函数。当您执行准备好的语句时,这两个函数都会被调用

在准备语句并包含以下内容时调用:

if (DBIc_DBISTATE(imp_xxh)->debug >= 2)
  PerlIO_printf(DBIc_LOGPIO(imp_xxh), ">count_params statement %s\n", statement);
if (DBIc_DBISTATE(imp_xxh)->debug >= 2)
  PerlIO_printf(DBIc_LOGPIO(imp_xxh), ">parse_params statement %s\n", statement);
在执行语句时调用,并包含以下内容:

if (DBIc_DBISTATE(imp_xxh)->debug >= 2)
  PerlIO_printf(DBIc_LOGPIO(imp_xxh), ">count_params statement %s\n", statement);
if (DBIc_DBISTATE(imp_xxh)->debug >= 2)
  PerlIO_printf(DBIc_LOGPIO(imp_xxh), ">parse_params statement %s\n", statement);
两者的逻辑是相同的,所以要么全有,要么什么都没有。

当我说“你不能”时,我的意思是没有内置的方法来使用DBD::mysql实现这一点。如果它真的困扰您,您可以过滤stderr,例如,
perl myscript.pl 2>&1 | grep-v'>count_params'
当我说“您不能”时,我的意思是没有内置的方法来使用DBD::mysql实现这一点。如果它真的困扰您,您可以过滤stderr,例如
perl myscript.pl 2>&1|grep-v'>count_params'