Bonjour,
Avec PDO, Je cherche à récupérer la requête préparée. Juste avant l'exécution.
Je ne vois pas vraiment comment faire...
QQun pour me m'aider?
Merci.
Bonjour,
Avec PDO, Je cherche à récupérer la requête préparée. Juste avant l'exécution.
Je ne vois pas vraiment comment faire...
QQun pour me m'aider?
Merci.
S'il n'existe pas ce que tu cherche dans la doc, c'est que ca n'existe pas...
or je ne vois rien qui y ressemble.
http://fr.php.net/manual/fr/class.pdostatement.php
Tu n'a donc plus qu'a trouver ou ton Statement est construit et récuperer directement la requete passée a PDO::prepare
hello,
Pour ce faire, il faudrait que tu extends pdo et pdo statment.
Regardes dans les commentaires de la doc il y à des exemples de déposés. Sinon jte déposerai le mien.. C'est simple à faire.
bye
Re,
Merci pour cette réponse Kaymak. Etendre PDO et PDOStatement était bien dans mon optique mais je ne vois pas comment faire pour récupérer la requête préparée et les exemples de la doc ne me parlent pas.
Ou peut-être que je ne regarde pas au bon endroit...
La requete préparée = La requete telle que tu l'a passé a PDO:repare
Si c'est bien ca que tu veux récuperer, il suffit d'ajouter un champ la stockant et de redéfinir la methode prepare. Puis d'ajouter une methode getRequest sur ton extends de PDOStatement
Si dans ton esprit, requete préparée = requete avec les valeurs... ben là ca a beaucoup moins d'interet deja, on perds tout l'apport de PDO, mais il faudra que tu redéfinisse également les methodes bindParam et bindValue pour reconstruire la requete "a la main", en sachant que ca ne sera jamais la requete telle qu'elle sera passée a la base, parce que dans le cas des requetes préparées, les requetes et les valeurs sont envoyées séparément.
Ouaip, perso, moi je l'avais fait au début pour pouvoir débugger mes requêtes.La requete préparée = La requete telle que tu l'a passé a PDO:repare
Si c'est bien ca que tu veux récuperer, il suffit d'ajouter un champ la stockant et de redéfinir la methode prepare. Puis d'ajouter une methode getRequest sur ton extends de PDOStatement
Si dans ton esprit, requête préparée = requete avec les valeurs... ben là ca a beaucoup moins d'intérêt deja, on perds tout l'apport de PDO, mais il faudra que tu redéfinisse également les methodes bindParam et bindValue pour reconstruire la requete "a la main", en sachant que ca ne sera jamais la requete telle qu'elle sera passée a la base, parce que dans le cas des requetes préparées, les requetes et les valeurs sont envoyées séparément.
Mais bon c'était il un quelques temps maintenant et j'avoue ne plus m'en servir aujourd'hui.
Whatever pour étendre pdo :
Après tu instancies du PDOPlus et pas du PDO.
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 class PDOPlus extends PDO{ public function __construct($dsn, $username="", $password="", $driver_options=array() ){ parent::__construct($dsn,$username,$password, $driver_options); $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('PDOPlusStatement', array($this))); } public function prepare( $sql ){ return parent::prepare( $sql ); } public function exec( $sql ){ return parent::exec( $sql ); } } class PDOPlusStatement extends PDOStatement{ public $dbh; protected function __construct($dbh){ $this->dbh = $dbh; } public function execute(){ return parent::execute(); } }
Le reste c'est à toi de l'implémenter ; )
bye
Ce que j'entends par requête préparée, c'est bien cela :la requête avec les valeurs. Mon but n'est pas d'usurper le rôle de PDO mais d'écrire dans un système de log toutes les requêtes envoyées vers le SGBD. (je sais que cela peut paraître étrange...)
Effectivement ceci pourrait me poser problème... je vais encore chercher.
Partager