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
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?
- chap
- Člen | 81
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í“.