Plusieurs requêtes sql via PDO, pas de résultat mais pas d'erreur...

Résolu/Fermé
Recoh Messages postés 36 Date d'inscription dimanche 19 juillet 2020 Statut Membre Dernière intervention 2 mars 2021 - 3 févr. 2021 à 11:02
Recoh Messages postés 36 Date d'inscription dimanche 19 juillet 2020 Statut Membre Dernière intervention 2 mars 2021 - 3 févr. 2021 à 14:12
Bonjour à vous,
j'essaye de récupérer des données à partir de ma bd : 3 menus différents avec 3 données différentes ; descriptif_menu, label_menu et prix_menu.
J'ai recopié une écriture que j'ai essayé d'adapter :
<?php
	error_reporting(E_ALL);
	ini_set('display_errors', TRUE);
	ini_set('display_startup_errors', TRUE);
	require_once "cnxbdd.php";
	$sql1 = mysql_query('SELECT descriptif_menu FROM menus WHERE menu = :menu;') OR die ('Erreur de la requête MySQL dm:menu');
	$dm1 = array(':menu'=>1);	
	$dm2 = array(':menu'=>2);
	$dm3 = array(':menu'=>3);
	$sql2 = mysql_query('SELECT label_menu FROM menus WHERE menu = :menu;') OR die ('Erreur de la requête MySQL lm:menu');
	$lm1 = array(':menu'=>1);	
	$lm2 = array(':menu'=>2);
	$lm3 = array(':menu'=>3);
	$sql3 = mysql_query('SELECT prix_menu FROM menus WHERE menu = :menu;') OR die ('Erreur de la requête MySQL pm:menu');
	$pm1 = array(':menu'=>1);	
	$pm2 = array(':menu'=>2);
	$pm3 = array(':menu'=>3);
	try{
		$requete = $bdd -> prepare($sql1);
		$requete->execute($dm1, $dm2, $dm3);
		$requete = $bdd -> prepare($sql2);
		$requete->execute($lm1, $lm2, $lm3);
		$requete = $bdd -> prepare($sql3);
		$requete->execute($pm1, $pm2, $pm3);
	}catch(Exception $e){
	echo " Erreur ! ".$e->getMessage();
	echo " Les datas : ";
	print_r($dm1, $dm2, $dm3, $lm1, $lm2, $lm3, $pm1, $pm2, $pm3);
	}
	$row = $requete->fetch();
	$dm1 = !empty($row) ? $row['descriptif_menu1'];
	$dm2 = !empty($row) ? $row['descriptif_menu2'];
	$dm3 = !empty($row) ? $row['descriptif_menu3'];
	$lm1 = !empty($row) ? $row['label_menu1'];
	$lm2 = !empty($row) ? $row['label_menu2'];
	$lm3 = !empty($row) ? $row['label_menu3'];
	$pm1 = !empty($row) ? $row['prix_menu1'];
	$pm2 = !empty($row) ? $row['prix_menu2'];
	$pm3 = !empty($row) ? $row['prix_menu3'];
	mysql_close();
?>

Je n'ai aucun retour d'erreur donc je pense que c'est soit dans l'exécution des requêtes, soit dans le stockage, soit les deux !
Ma page affiche :
<p align="center">
	–  Le  à  € : <br>–  Le  à  € : <br>–  Le  à  € : <br>.
</p>

à la résolution du code :
<?php
		$str0 = "– ";
		$str1 = " Le "; 
		$str2 = " à ";
		$str3 = " € : ";
		echo $str0 . $str1 . $lm1 . $str2 . $pm1 . $str3 . $dm1 . "<br>";
		echo $str0 . $str1 . $lm2 . $str2 . $pm2 . $str3 . $dm2 . "<br>";
		echo $str0 . $str1 . $lm3 . $str2 . $pm3 . $str3 . $dm3 . "<br>";
	?>.

Est-ce que vous voyez les erreurs ou c'est-y que je prends le truc à l'envers ?
:)

3 réponses

Recoh Messages postés 36 Date d'inscription dimanche 19 juillet 2020 Statut Membre Dernière intervention 2 mars 2021
Modifié le 3 févr. 2021 à 11:55
J'ai repris le code dans une page à part pour la première variable :
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
try{
 $bdd =new PDO('mysql:host=sql.free.fr; dbname=xxxx; charset=utf8', 'xxxx', 'xxxx');
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
 $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}
$sql = "SELECT descriptif_menu FROM menus WHERE menu = :menu;";
$dm1 = array(':menu'=>1);
try{
 $requete = $bdd -> prepare($sql) ;
 $requete->execute($dm1) ;
}catch(Exception $e){
  // en cas d'erreur :
 echo " Erreur ! ".$e->getMessage();
 echo " Les datas : " ;
 print_r($datas);
}

//on stocke le résultat de la requête dans un array
$row = $requete->fetch();
$dm1 = !empty($row) ? $row['descriptif_menu'] : "";
?>
<!Doctype>
<html>
  <head>
    <meta charset="utf-8">
    <title>Ton titre</title>
  </head>
  <body>

    <h2 align="center">Les Menus</h2>
    <p align="center">Que diriez-vous d'un menu à emporter ?</p>


    <p><?php echo "$dm1" ?> :  €</p>
  </body>
</html>

Et ça a fonctionné :
<!Doctype>
<html>
  <head>
    <meta charset="utf-8">
    <title>Ton titre</title>
  </head>
  <body>

    <h2 align="center">Les Menus</h2>
    <p align="center">Que diriez-vous d'un menu à emporter ?</p>


    <p>Velouté de saison, Poulet à la Bière :  €</p>
  </body>
</html>


Je vais essayer de résoudre tous les champs à partir de ce "modèle"...
0
Recoh Messages postés 36 Date d'inscription dimanche 19 juillet 2020 Statut Membre Dernière intervention 2 mars 2021
3 févr. 2021 à 13:44
J'ai ajouté et renommé une requête :
$sql1 = "SELECT descriptif_menu FROM menus WHERE menu = :menu;";
$dm1 = array(':menu'=>1);
$dm2 = array(':menu'=>2);
try{
	$requete1 = $bdd -> prepare($sql1) ;
	$requete1->execute($dm1) ;
	$requete2 = $bdd -> prepare($sql1) ;
	$requete2->execute($dm2) ;
}catch(Exception $e){
  // en cas d'erreur :
	echo " Erreur ! ".$e->getMessage();
	echo " Les datas : " ;
	print_r($datas);
}

//on stocke le résultat de la requête dans un array
$row = $requete1->fetch();
$dm1 = !empty($row) ? $row['descriptif_menu'] : "";
$row = $requete2->fetch();
$dm2 = !empty($row) ? $row['descriptif_menu'] : "";

et modifié la page html :
    <p><?php echo "$dm1" ?> :  €</p>
    <p><?php echo "$dm2" ?> :  €</p>

et ça donne :
Velouté de saison, Poulet à la Bière : €

Velouté au Fromage, Volaille sauce aux Cèpes : €

Donc ça marche alors que le code source de la page :
<!Doctype>
<html>
  <head>
    <meta charset="utf-8">
    <title>Ton titre</title>
  </head>
  <body>

    <h2 align="center">Les Menus</h2>
    <p align="center">Que diriez-vous d'un menu à emporter ?</p>
    <p>Velouté de saison, Poulet à la Bière :  €</p>
    <p>Velouté au Fromage, Volaille sauce aux Cèpes :  €</p>
  </body>
</html>

J'essaye d'intégrer toutes les données...
0
Recoh Messages postés 36 Date d'inscription dimanche 19 juillet 2020 Statut Membre Dernière intervention 2 mars 2021
3 févr. 2021 à 14:12
Je récupère toutes mes données :
$sql1 = "SELECT descriptif_menu FROM menus WHERE menu = :menu;";
$sql2 = "SELECT label_menu FROM menus WHERE menu = :menu;";
$sql3 = "SELECT prix_menu FROM menus WHERE menu = :menu;";

$dm1 = array(':menu'=>1);
$dm2 = array(':menu'=>2);
$dm3 = array(':menu'=>3);

$lm1 = array(':menu'=>1);
$lm2 = array(':menu'=>2);
$lm3 = array(':menu'=>3);

$pm1 = array(':menu'=>1);
$pm2 = array(':menu'=>2);
$pm3 = array(':menu'=>3);

try{
	$requete1 = $bdd -> prepare($sql1) ;
	$requete1->execute($dm1) ;
	$requete2 = $bdd -> prepare($sql1) ;
	$requete2->execute($dm2) ;
	$requete3 = $bdd -> prepare($sql1) ;
	$requete3->execute($dm3) ;
	
	$requete4 = $bdd -> prepare($sql2) ;
	$requete4->execute($lm1) ;
	$requete5 = $bdd -> prepare($sql2) ;
	$requete5->execute($lm2) ;
	$requete6 = $bdd -> prepare($sql2) ;
	$requete6->execute($lm3) ;

	$requete7 = $bdd -> prepare($sql3) ;
	$requete7->execute($pm1) ;
	$requete8 = $bdd -> prepare($sql3) ;
	$requete8->execute($pm2) ;
	$requete9 = $bdd -> prepare($sql3) ;
	$requete9->execute($pm3) ;

}catch(Exception $e){
  // en cas d'erreur :
	echo " Erreur ! ".$e->getMessage();
	echo " Les datas : " ;
	print_r($datas);
}

//on stocke le résultat de la requête dans un array
$row = $requete1->fetch();
$dm1 = !empty($row) ? $row['descriptif_menu'] : "";
$row = $requete2->fetch();
$dm2 = !empty($row) ? $row['descriptif_menu'] : "";
$row = $requete3->fetch();
$dm3 = !empty($row) ? $row['descriptif_menu'] : "";

$row = $requete4->fetch();
$lm1 = !empty($row) ? $row['label_menu'] : "";
$row = $requete5->fetch();
$lm2 = !empty($row) ? $row['label_menu'] : "";
$row = $requete6->fetch();
$lm3 = !empty($row) ? $row['label_menu'] : "";

$row = $requete7->fetch();
$pm1 = !empty($row) ? $row['prix_menu'] : "";
$row = $requete8->fetch();
$pm2 = !empty($row) ? $row['prix_menu'] : "";
$row = $requete9->fetch();
$pm3 = !empty($row) ? $row['prix_menu'] : "";


et complété le code html dans ma page :
<p><?php echo "$lm1" ?> : <?php echo "$dm1" ?> : <?php echo "$pm1" ?> €</p>
<p><?php echo "$lm2" ?> : <?php echo "$dm2" ?> : <?php echo "$pm2" ?> €</p>
<p><?php echo "$lm3" ?> : <?php echo "$dm3" ?> : <?php echo "$pm3" ?> €</p>


Et ça continue de fonctionner !
Je me demande comment réduire le nombre d'écritures et de requêtes, je suis sûr qu'on peut obtenir au moins les données d'un seul menu en une seule requête mais j'ai pas assez de connaissances pour ce faire...
Je vais me contenter de ça pour l'instant !
0