Problème à la lecture d'une base de donnée

Résolu
animix Messages postés 130 Date d'inscription   Statut Membre Dernière intervention   -  
animix Messages postés 130 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je commence la programmation d'un site en HTML et en PHP. Mais je me retrouve face à un problème.
Voila la partie du code qui semble avoir une erreur:
if(!isset($_GET['page']))
	$_GET['page']='acceuil';
	
	if(!isset($_GET['menu']))
	$_GET['menu']='acceuil';
	
	if(!isset($_GET['num']))
	$_GET['num']='1';
	
	$aa=$_GET['page'];
	
	$reponse = $bdd->prepare('SELECT Nom,Contenu FROM \''. $aa .'\' WHERE Nom=?');
	$reponse->execute(array($_GET['menu']));
	
 
	while ($donnees = $reponse->fetch())
	{
	echo '<p class="contenu" > '.$donnees['Contenu'].'</p>'; 
	}
	$reponse->closeCursor();

Ce code n'affiche absolument rien. Mais lorsque je remplace :
$reponse = $bdd->prepare('SELECT Nom,Contenu FROM \''. $aa .'\' WHERE Nom=?');

par
$reponse = $bdd->prepare('SELECT Nom,Contenu FROM acceuil WHERE Nom=?');

Le code marche alors.

J'aimerais alors savoir si c'est l'emploie d'une variable après FROM qui engendre son non fonctionnement ou si non d'où peut venir le problème ?

2 réponses

Alming Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   16
 
Tu as ajouté une paire de parenthèses échappées par des antislash ; pour palier à ce problème, copie la requête ci-dessous :
$reponse = $bdd->prepare('SELECT Nom, Contenu FROM'. $aa .' WHERE Nom=?');


Par contre, je te conseil d'utiliser le marqueur « ? » pour pouvoir intégrer ta variable $aa dans ta requête :
$reponse = $bdd->prepare('SELECT Nom, Contenu FROM ? WHERE Nom=?');
$reponse -> execute(array($_GET['page'], $_GET['menu']));


Voilà ! Après avoir fait cette petite manipulation, ça devrait fonctionner.
2
animix Messages postés 130 Date d'inscription   Statut Membre Dernière intervention   18
 
Ok ! Mais la deuxième astuce ne fonctionne pas ...
Sinon Merci !
0
Utilisateur anonyme
 
Bonsoir

Quand tu remplace $aa par sa valeur accueil,
$reponse = $bdd->prepare('SELECT Nom,Contenu FROM \''. $aa .'\' WHERE Nom=?');
ne devient pas
$reponse = $bdd->prepare('SELECT Nom,Contenu FROM acceuil WHERE Nom=?');

mais
$reponse = $bdd->prepare('SELECT Nom,Contenu FROM 'acceuil' WHERE Nom=?');

Ce qui n'est pas du tout la même chose. Un nom de table peut être entouré d'accents graves(`) , mais pas d'apostrophes(') en mysql

Donc tu as juste à supprimer les \' en trop dans ta requête, mais tu peux très bien utiliser ta variable.

Et enfin, en PDO, ne suis pas le conseil de Alming en ce qui concerne le remplacement de ton nom de table par un ? : ça ne marche pas, l'utilisation du ? est strictement réservée au remplacement des valeurs (nombres, chaînes de caractères) mais en aucun cas utilisable pour les noms d'objets (champs ou tables)
1
animix Messages postés 130 Date d'inscription   Statut Membre Dernière intervention   18
 
Merci ! J'avais peur de ne pas pouvoir utiliser la variable :S
Mon site marche enfin nickel !
0