Comment débugger une classe

Fermé
nexitude Messages postés 9 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 6 avril 2016 - 3 févr. 2016 à 18:15
nexitude Messages postés 9 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 6 avril 2016 - 5 févr. 2016 à 13:23
Bonjour,

Quand je créé une classe, j'ai du mal à débugger car je ne sais pas comment afficher mes erreurs SQL.

Je vous donne un exemple (sans les méthodes et attributs) :


class cAction {
public function update(cAction $myAction) {
$q = $this->_db->prepare('UPDATE action SET prenom = :=prenom WHERE id = :id');
$q->bindValue(':prenom', $myAction->prenom());
$q->bindValue(':id', $myAction->id(), PDO::PARAM_INT);
$q->execute();
}


J'ai volontairement mis un erreur au niveau de :=prenom

Lorsque j’exécute, cela ne me dit pas où est exactement mon erreur et je me mets à chercher partout.

Dans une fonction sans objet, j'aurais mis ma requête dans une variable et fais un return mais dans mon cas on ne peut pas.

J'ai essayé avec try et catch mais rien n'y fait. J'obtiens seulement Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number

Comment faites vous pour débugger une classe utilisant PDO ?

1 réponse

jordane45 Messages postés 38174 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 mai 2024 4 665
3 févr. 2016 à 18:25
Bonjour,

Ben... comme tu as fais !
Avec un Try Catch.


J'ai essayé avec try et catch mais rien n'y fait. J'obtiens seulement Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number

Et... que veux tu d'autre comme message ???

par contre, pour ma part, j'utilise pas le BindParam... je préfère utiliser un Array
comme ceci :

//je sors la requête pour en faire un echo si besoin (en cas de pb par exemple)
$sql = "UPDATE action SET prenom = :=prenom WHERE id = :id";

//je place les variables dans un Array (là aussi pour les afficher au cas ou)
$a_datas = array(
             ':id' => $myAction->id()
            ,':prenom'=>$myAction->prenom()
					);


//exécution de la requête :
try{	
     $q = $this->_db->prepare($sql);
   $res = $q->execute($a_datas);
}catch(Exception $e) {
   echo "<br><b>Erreur !</b> ".$e->getMessage()."<br>";
	 echo "<br> Requete : ".$sql;
	 echo "<br> Variables : <br>";
   print_r($a_datas);
}


0
nexitude Messages postés 9 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 6 avril 2016 1
5 févr. 2016 à 13:23
Je pensais que je pourrais avoir un message plus explicite.
En tout cas je vais utiliser ton astuce du Array.

Merci pour ta réponse
0