2016-03-08 3 views
0

Après la connexion à une base de données MySQL en utilisant DBI activer trace comme çaComment puis-je empêcher les instructions d'être générées plusieurs fois lorsque le suivi SQL est activé avec DBI?

$dbh->trace('SQL|DBD'); 

Puis, après cette mes requêtes SQL sont imprimées deux fois:

>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 = ? 

Comment puis-je imprimer chaque instruction SQL exécutée une seule fois?

Répondre

2

Comment puis-je imprimer chaque instruction SQL exécutée une seule fois?

Vous ne pouvez pas. count_params et parse_params sont des fonctions internes utilisées par DBD :: mysql pour émuler des instructions préparées sur le client. Les deux sont appelés lorsque vous exécutez une instruction préparée.

count_params est appelée lorsqu'une instruction est préparée et contient les éléments suivants:

if (DBIc_DBISTATE(imp_xxh)->debug >= 2) 
    PerlIO_printf(DBIc_LOGPIO(imp_xxh), ">count_params statement %s\n", statement); 

parse_params est appelée lorsqu'une instruction est exécutée et contient les éléments suivants:

if (DBIc_DBISTATE(imp_xxh)->debug >= 2) 
    PerlIO_printf(DBIc_LOGPIO(imp_xxh), ">parse_params statement %s\n", statement); 

La logique est la même pour les deux, donc c'est soit tout ou rien.

+1

Quand je dis "vous ne pouvez pas", je veux dire qu'il n'y a pas de façon intégrée de le faire avec DBD :: mysql. Si cela vous dérange vraiment, vous pouvez filtrer stderr, par exemple. 'perl myscript.pl 2> & 1 | grep -v '> count_params'' – ThisSuitIsBlackNot