[RESOLU] Problème affichage de données PDO

Mammouth du PHP | 804 Messages

23 janv. 2014, 18:47

Bonjour,

J'ai décidé de passer à la PDO et bien entendu malgré les centaines de tuto que j'ai regardé je plante complet sur l'affichage des données,

j'ai l'error suivante à chaque fois, je précise que je suis en SM OFF et RG OFF
Notice: Undefined property: stdClass::$Nom
$query = 'SELECT *'
	. ' FROM src_ref'
	. ' WHERE ID>?'
		. ' AND cat=?'
	. ' LIMIT ?;';
$prep = $db->prepare($query);
 
$prep->bindValue(1, 0, PDO::PARAM_INT);
$prep->bindValue(2, 'Animaux', PDO::PARAM_STR);
$prep->bindValue(3, 5, PDO::PARAM_INT);
 
$prep->execute();
 
//$row = $prep->fetchAll(PDO::FETCH_ASSOC);

  // J'affiche le resultat
while($row = $prep->fetch(PDO::FETCH_OBJ)){
	echo $row->Nom." ".$row->Photo." ".$row->Date."<br/>";
}
merci de votre aide

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

23 janv. 2014, 22:18

salut,

y a quoi comment champ dans ta table src_ref ?

c'est quoi comme sgbd derrière (oracle, mysql etc)?


sinon les indispensables debugguer (xdebug par exemple) ou var_dump() t'aiderons à résoudre ton problème ;)

quoi qu'il arrive tu n'as pas champ "nom" dans la requête SQL.

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

Mammouth du PHP | 804 Messages

24 janv. 2014, 00:51

Salut moogli,

c'est du MySQL, j'ai les champs suivant

"Nom , Photo, cat, Titre , Valide"

j'essai de faire une simple requête d'affichage pour commencer à me familiariser avec cette méthode mais je dois mal mis prendre quelque part

Mammouth du PHP | 804 Messages

24 janv. 2014, 10:01

Bon et bien tu as finalement mis le doigt sur le problème, j'ai mis un champ qui n'existe pas dans ma base de donnée mysql et en plus je ne savais pas qu'il fallait ignorer les majuscules

je met le code qui fonctionne au cas ou quelqu'un tombe sur phpfrance avec le même problème d'affichage de donnée PDO mysql
$query = 'SELECT *'
	. ' FROM src_ref'
	. ' WHERE ID>?'
		. ' AND cat=?'
	. ' LIMIT ?;';
	
$prep = $db->prepare($query);
$prep->bindValue(1, 0, PDO::PARAM_INT);
$prep->bindValue(2, 'Animaux', PDO::PARAM_STR);
$prep->bindValue(3, 5, PDO::PARAM_INT);
 
$prep->execute();

while($lignes=$prep->fetch(PDO::FETCH_OBJ))
{
        echo $lignes->id.'<br />';
        echo $lignes->cat.'<br />';
        echo $lignes->titre.'<br />';
        echo $lignes->texte.'<br />';
        echo $lignes->photo.'<br />';
}
 

 // permet de tester la base de donnée en préproduction
/*if($prep !== false){
	echo 'Les données sont disponibles:';
}else{
	echo 'Aucun résultat disponible.';
}*/

//Clore la requête préparée
$prep->closeCursor();
$prep = NULL;
merci moogli

Mammouth du PHP | 804 Messages

24 janv. 2014, 12:20

//$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); 
// les noms de champs seront en caractères minuscules
voilà pourquoi je devais tout mettre en minuscule :oops:

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

24 janv. 2014, 18:41

ATTENTION avec oracle c'est des champs en majuscule qui sont fournit et il faut ajouter cette ligne pour les avoir en minuscule.

Si tu indiquais les noms des colonnes dans le select plutôt que d'utiliser l'étoile (de la mort c'est le mal ...) tu aurais eu une erreur explicite ;)
cela permet aussi en lisibilité (tu ne cherche d'où viens une info) et je ne t'aurais pas posé la question ;)
en plus tu ne retourne pas 50 champs qui te sont inutile.


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

Mammouth du PHP | 804 Messages

25 janv. 2014, 11:06

merci pour cette précision importante, j'en prends bonne note :wink: