Comment débugger une classe

nexitude Messages postés 9 Statut Membre -  
nexitude Messages postés 9 Statut Membre -
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 40050 Date d'inscription   Statut Modérateur Dernière intervention   4 758
 
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 Statut Membre 1
 
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