Problème avec requète sous PDO

Petit nouveau ! | 3 Messages

03 avr. 2014, 08:53

Voici mon petit bout de code qui doit être assez clair :)
<?php
try
    {
        $bdd = new PDO('mysql:host=localhost; dbname=madness_piercing', 'root', '');
    }
    catch (Exeption $e)
    {
        die('Erreur : ' .$e->getMessage());
    }
 
 
 
$menu = $bdd -> query('SELECT * FROM menu') or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$sous_menu = $bdd -> query('SELECT * FROM sous_menu') or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$i = '0';
$id_onglet;
echo "<ul>";
while($donnees_menu = $menu -> fetch())
{
    $i++;
    echo "<li>";
    echo $donnees_menu['nom_onglet'];
    echo "</li>";
 
    if($i == ($id_onlget = $sous_menu['ID_menu']))
    {
        echo "<ul>";
        while($donnees_sous_menu = $sous_menu -> fetch())
        {
            echo "<li>";
            echo $donnees_sous_menu['nom_onglet_sous_menu'];
            echo "</li>";
        }
        $sous_menu -> closeCursor();
        echo "</ul>";
    }
     
     
}
$menu-> closeCursor();
echo "</ul>";
?>
l'erreur est la suivante Fatal error: Cannot use object of type PDOStatement as array in C:\wamp\www\lucie\include_php\test\menu_sql.php on line 25

en fait je ne comprends pa d'ou viens l'erreur alors que je ne fais que utiliser une variable :(

Eléphanteau du PHP | 46 Messages

03 avr. 2014, 10:01

Ton erreur vient de la ligne (si je ne me trompe pas)
$sous_menu['ID_menu']
En effet la fois ou tu utilise la variable $sous_menu avant c'est pour cette ligne :
$sous_menu = $bdd -> query('SELECT * FROM sous_menu') or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
Or "PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur survient.". Ce n'est en aucun cas un array.

Je pense que tu t'es trompé de variable.

Peu-etre voulais tu utiliser la variable "$donnees_menu" plutot ?
Kal747
---
Envie de faire des rencontres gratuites ? Essayez mon site de rencontre
A la recherche d'une maison ou d'un appartement ? Trouvez le meilleur prix sur annonces immobilières

Petit nouveau ! | 3 Messages

03 avr. 2014, 10:07

nn je ne pense pas car c'est une deuxième boucle qui opère pour l'affichage , donc je pense que la problème viens du fetch() , ma variable n'est pas conditionnée pour revevoir des données array , qui ne sont déclarée que à la ligne
while($donnees_sous_menu = $sous_menu -> fetch())

Eléphanteau du PHP | 46 Messages

03 avr. 2014, 12:53

Sisi :lol:

Tu utilise $sous_menu de cette façon :

1. $sous_menu = $bdd -> query('SELECT * FROM sous_menu') or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
2. $sous_menu['ID_menu'];

Il n'y a pas de fetch entre les 2, tu ne peux pas faire $sous_menu['ID_menu'] sur un PDOStatement, ça te renvoi l'erreur que tu as.

Je ne sais pas a quoi ressemble ta base, mais ne cherche tu pas a faire plutôt :

1. $sous_menu = $bdd -> query('SELECT * FROM sous_menu') or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
2. $donnees_sous_menu = $sous_menu -> fetch();
3. $donnees_sous_menu ['ID_menu']

?
Kal747
---
Envie de faire des rencontres gratuites ? Essayez mon site de rencontre
A la recherche d'une maison ou d'un appartement ? Trouvez le meilleur prix sur annonces immobilières

Petit nouveau ! | 3 Messages

03 avr. 2014, 16:56

j'ai quand meme tester pour être sur mais en fait dans ma répopnse après avoir fait ce que tu m'as dis ben je me retrouve avec toutes les réponse du array
regarde ce que j'ai fait et regarde la réponse :)
$menu = $bdd -> query('SELECT * FROM menu') or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$sous_menu = $bdd -> query('SELECT * FROM sous_menu') or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$donnees_sous_menu = $sous_menu->fetch();
$i = '0';

echo "<ul>";


while($donnees_menu = $menu -> fetch())
{
	$i++;
	echo "<li>";
	echo $donnees_menu['nom_onglet'];
	echo "</li>";

	if($i == $donnees_sous_menu['ID_menu'])
	{
		echo "<ul>";
		foreach($donnees_sous_menu as $affichage)
		{
			echo "<li>";
			echo $affichage['nom_onglet_sous_menu'];
			echo "</li>";
		}
		$sous_menu -> closeCursor();
		echo "</ul>";
	}	
}
$menu-> closeCursor();
echo "</ul>";


réponse :
Documentation
Photos
Videos
Contact
Boutique
1
1
5
5
b
b
<
<