Bonjour,
Je suis entrain de développer une petite classe pour gérer les requetes SQL et traiter les erreurs possibles.
J'ai donc fait une classe SQLManager :
J'ai aussi fait une classe DatabaseQueryException :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 <?php class SQLManager { function SQLManager() { } function query($sql) { try { $req = @ pg_query($sql); if ($req == false) { $code = 0; $message = pg_last_error(); throw new DatabaseQueryException($message, $code); } } catch (DatabaseQueryException $e) { echo "Capture de l'exception : ", $e, "\n"; } } } ?>
J'ai ensuite voulu tester tout ça avec un fichier test.php contenant notamment :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 class DatabaseQueryException extends Exception { protected $message; public function DatabaseQueryException($message, $code) { $this->message = $message; parent::__construct($message, $code); } public function __destruct() { unset($this->message); } public function __toString() { $this->__destruct(); $error = $this->getFile(); $error .= ' '; $error .= $this->getLine(); $error .= ' '; $error .= $this->message; return $error; } }
La requete retourne volontairement une erreur, qui est bien géré par mes classe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $sql = "SELECT usr_emailtt FROM d_user"; $s = new SQLManager(); $s->query($sql);
Le PROBLEME est que la ligne et le fichier rapportés dans le message d'exception sont le fichier SQLManager et la ligne où on attrape l'exception.
Alors que moi je veux que l'exception me dise que l'erreur se trouve dans le fichier test.php à la ligne ou je fais $s->query($sql);.
Avec __LINE__ et __FILE__ le problème est le même (même si c'est logique).
J'aimerai au maximum externaliser les traitements et la gestion des erreurs dans mes deux classes plutôt que d'entourer de try/catch toutes mes requetes de mon code.
Existe-il une fonction pour connaitre depuis quel fonction/fichier est appelé une autre fonction ?
Par exemple connaître dans ma fonction query de ma classe SQLManager, depuis quel fichier/fonction elle est appelée pour pouvoir la passer à mon exception.
Merci d'avance pour votre aide
Partager