logování sql onquery – mnohonásobné zapsání jednoho dotazu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
chap
Člen | 81
+
0
-

PHP 5.3, Nette 2.0.8
Ahoj,
rád bych ve své aplikaci logoval sql dotazy (před uložením bych rád provedl vlastní filtr – ukládat pouze modifikující dotazy a případně je upravit). Ve třídě repository nastavím:

$this->connection->onQuery[] = callback($this,"logMods");

vlastní metoda je:

    public function logMods(Nette\Database\Statement $result, array $params = NULL){
        $query = $result->queryString;
        if (strpos(trim($query), "SET")===0)return;
        if (strpos(trim($query), "SELECT")===0)return;
        if (strpos(trim($query), "EXPLAIN")===0)return;

        $cas = new \Nette\DateTime();
        $user = \Nette\Environment::getUser()->id;
        $string = $cas. " ". $user." ".$query."\n";
        $file = TMP_DIR."log/sql.log";
        $handle = fopen($file, "a");
        fwrite($handle, $string);
        fclose($handle);
    }

Dotazy to loguje, ale nejspíš je tato metoda volána ještě odněkud a požadované dotazy mi to zapíše cca 20×.
Nevíte prosím čím by to mohlo být?

newPOPE
Člen | 648
+
0
-

To asi jedine odkrokovat a podla call stacku zistit odkial sa to vola…

chap
Člen | 81
+
0
-

Už se mi podařilo odhalit chybu. Metodu přiřazuji v konstruktoru Repository, kterou dědím do dalších tříd. Tyto třídy v presenteru přidělím vlastním proměnným (zde se pravděpodobně volá konstruktor každé této třídy) a tím přidám i další callback do pole onQuery … ošetřl jsem to tak, aby přidání proběhlo pouze 1× a je to již ok. :) Ale díky za „nakopnutí“.