[RESOLU] Fonction PHP/BDD extraction de données

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

13 juin 2016, 17:19

$req= $bdd->prepare('SELECT entities_id FROM glpi_computers WHERE name = ?');

PDO se démerde pour les apostrophes, c'est l'avantage d'utiliser les marqueurs.
http://php.net/manual/fr/pdo.prepare.php

tu devrais utiliser les marqueurs nommé c'est plus clair à la lecture ;)


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 24 Messages

13 juin 2016, 17:22

$req= $bdd->prepare('SELECT entities_id FROM glpi_computers WHERE name = ?');

PDO se démerde pour les apostrophes, c'est l'avantage d'utiliser les marqueurs.
http://php.net/manual/fr/pdo.prepare.php

tu devrais utiliser les marqueurs nommé c'est plus clair à la lecture ;)


@+

j'étudie le lien donné. Je fais comme j'ai appris en cours en faite. Néanmoins je ne pense pas que l'erreur soit de là.
Je pense que si j'ai un 1 qui s'affiche dans tout les cas c'est car la fonction execute() est un booléen, et donc elle renvoie true dans mon cas. Mais je n'arrive pas à soutiré ma donnée nécessaire.

Mammouth du PHP | 1967 Messages

14 juin 2016, 08:30

en effet après un execute, il faut faire un fetch... il y en a plusieurs à toi de choisir lequel correspond à ce que tu cherche
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 24 Messages

14 juin 2016, 09:31

en effet après un execute, il faut faire un fetch... il y en a plusieurs à toi de choisir lequel correspond à ce que tu cherche
Je vois bien ce que vous dites, mais je ne comprend pas comment l'utiliser dans mon cas, et je ne vois pas pourquoi le mettre dans un while étant donné que je veux pour une seule ligne, avoir l'entité. Je ne comprend pas comment l'utiliser...

Eléphanteau du PHP | 24 Messages

14 juin 2016, 09:55

J'ai fais :

Code : Tout sélectionner

static function entiteOrdinateur($ordinateur) { try { include('./include/connect.php'); $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:dbname=glpi;host=localhost', 'root', ''); $req= $bdd->prepare('SELECT entities_id FROM glpi_computers WHERE name = :ordinateur'); //$req->execute(array($ordinateur)); $TableauEntite = $req->execute(array(':ordinateur' =>$ordinateur)); $req->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $TableauEntite = $TableauEntite->fetchColumn(); return $TableauEntite; } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } }
J'ai rajouter le fetch column et j'ai affiché mes erreurs.
J'obtient avec le setAttribute :
Warning: PDOStatement::setAttribute(): SQLSTATE[IM001]: Driver does not support this function: This driver doesn't support setting attributes in monchemin on line 15

Mammouth du PHP | 1967 Messages

14 juin 2016, 11:01

je suis pas un expert de PDO, mais je pense que le setAttribute doit être mis sur ta connection et non pas ta requète

le message d'erreur indique bien que tu ne peux pas le mettre sur ta requète
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 24 Messages

14 juin 2016, 11:14

je suis pas un expert de PDO, mais je pense que le setAttribute doit être mis sur ta connection et non pas ta requète

le message d'erreur indique bien que tu ne peux pas le mettre sur ta requète
Je m'en suis rendu compte et en le mettant sur $bdd, aucune erreur ne s'affiche donc le soucis n'est pas sur ma requête .. :(

Mammouth du PHP | 1967 Messages

14 juin 2016, 11:46

tu es sur que ta requête te renvoie bien au moins une ligne ?
un résultat vide ne générera pas d'erreur mais ne t'affichera rien
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 24 Messages

14 juin 2016, 11:52

Code : Tout sélectionner

$req= $bdd->prepare('SELECT id,name,entities_id FROM glpi_computers WHERE name = :ordinateur'); $req->execute(array(':ordinateur' =>$ordinateur));
Dans ma BDD quand j'execute la commande mais a la place de :ordinateur je met le nom d'un PC en dur, la requete me renvoie bien une donnée.

Eléphanteau du PHP | 24 Messages

14 juin 2016, 12:11

La fonction miracle est :

Code : Tout sélectionner

static function entiteOrdinateur($ordinateur) { try { include('./include/connect.php'); $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:dbname=glpi;host=localhost', 'root', ''); $req= $bdd->prepare('SELECT id,name,entities_id FROM glpi_computers WHERE name = :ordinateur'); //$req->execute(array($ordinateur)); $req->execute(array(':ordinateur' =>$ordinateur)); if ($TableauEntite = $req->fetch()) { return $TableauEntite['entities_id']; } else { return -1; } } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } }
Merci de l'aide !