1) Le setAttribute doit être fait sur l'objet $bdd
2) avant de faire le fetchAll, vérifie que la méthode exécute a bien retourné un objet et pas false
Bonjour,
Voila je rencontre un petit problème avec mon code.
Ce que je fais
Décrivez ici votre code ou ce que vous cherchez à faire
J'ai une classe ordinateur :
Une classe gestionOrdi :
J'ai un controller recapitulatif.php :
J'ai une view recapitulatif.php :
J'ai une fonction dans une classe gestionEntite qui est :
Ce que je veux
Je voudrai obtenir "entities_id" qui se situe dans ma BDD dans une table glpi_computers.
Ce que j'obtiens
Problème, c'est que ma fonction ou mes appels ne marchent pas. Il me retourne sans cesse 1. Sans mettre la ligne :
$TableauEntite = $TableauEntite->fetchColumn(); ou $TableauEntite = $TableauEntite->fetchAll();
J'obtient 1, avec cette ligne j'obtient l'erreur
Fatal error: Call to a member function fetchColumn() on a non-object in monchemin on line 15.
Lors que je fais la commande :
$req->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
J'ai l'erreur :
Warning: PDOStatement::setAttribute(): SQLSTATE[IM001]: Driver does not support this function: This driver doesn't support setting attributes in monchemin on line 15
Je vous remercie par avance, je galère vraiment depuis deux ou trois jours, c'est une erreur débile j'en suis sur, mais voilà, ça me bloque tout mon projet.
18 réponses
1) Le setAttribute sur $bdd ne m'affiche aucune erreur.
2) Comment le vérifier ? Vue que ça m'affiche 1 sur ma page php, je pense que execute est une fonction booléenne, et donc elle me renverrai true...
pour 2) exact ça retourne un booléen désolé
Pour le 1)
si tu fais $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
tu devrais catcher l'erreur sans pb
je vois que tu avais préparé un tableau d'options, donc
Essaye PDOException plutôt qu'Exception
Je veux bien effectuer ces changements, j'applique comme j'ai pu apprendre en cours nous on utiliser Exception. Mais ça ne fait toujours pas marcher ma fonction en faite ... Je ne vois vraiment pas d'où peu venir mon erreur.
Merci en tout cas de m'apprendre les différentes syntaxes de PDO et de m'avoir conseillé !
Ta fonction retourne une matrice parceque fetchAll retourne un tableau à 2 dimensions (lignes x colonnes)
même si ta requête ne renvoie qu'une seule ligne
il faut lire
si tu avais utilisé fetch tu aurais eu qu'un tableau à une dimension
Merci de m'avoir expliqué la différence des fetch !! Ca m'aide vraiment !
Donc j'ai remplacé le fetchAll par un fetch.
Le :
$entiteOrdinateur['entities_id']
Si je comprend bien c'est dans ma view, c'est l'appel.
Mais avec ma fonction :
J'obtiens l'erreur suivante :
Fatal error: Call to a member function fetch() on a non-object in F:\STAGE2_VACALIANS\model\GestionEntite.class.php on line 15
Tu l'as dit toi même, le execute renvoie un booleen
tu dois appliquer le fetch sur $req
Je fais donc ça ?
Si oui, je n'ai plus rien du tout, plus de 1, plus d'erreur, c'est peut-être une avancée..
essaye de renvoyer l'id seul
Notice: Undefined index: entities_id in F:\STAGE2_VACALIANS\model\GestionEntite.class.php on line 16
Soit sur cette ligne : return $TableauEntite['entities_id'];
c'est que PDO ne renvoie pas de tableau associatif
essaye
return $TableauEntite[0];
ERREUR : Notice: Undefined offset: 0 in F:\STAGE2_VACALIANS\model\GestionEntite.class.php on line 16
Ca serait pas un probleme dans mon controler :
Ou dans ma vue :
c'est que ta requête ne retourne rien
pour un fetch, il faut toujours tester s'il y a un résultat
Ca me retourne -1, tu as raison.
L'erreur est donc dans ce bloc.
Oui forcement tu passes un objet Ordinateur à ta fonction alors qu'elle attend un nom d'ordinateur (String)
il faudrait faire
Il est là le soucis, je pensais avoir récupérer le nom de l'ordinateur présent dans ma view. L'erreur venait donc bien du controler. Merci beaucoup ! ENORMEMENT même !
Je te conseille de renommer ta fonction getOrdinateurIdByName()
au moins on comprend
Non non, ca ne me permet pas de récupérer l'ordinateur. C'est assez complexe a comprendre.
L'interface que je dois réaliser est assez complexe, et en faite, avant cet étape j'ai du choisir un lieu et un ordinateur. Un ordinateur appartient à utilisateur, qui appartient à un lieu, et le lieu correspond à une entitée. Donc l'utilisateur et/ou l'ordinateur a l'entitée correspondante.