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í“.