[RESOLU] Impossible de récupérer des données pour les afficher.

Petit nouveau ! | 6 Messages

05 mai 2016, 13:36

Bonjour , j'ai créer un système de post sur mon site web et j'aimerais qu'il s'affiche une fois dans la base de donnée , cependant j'ai essayé avec ce code
<?php
session_start();

$bdd = new PDO ('Ma connexion cachée volontairement ^^');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

						$sql_print_post = 'SELECT * FROM post';
						try 
							{

						    $req_post_affichage = $bdd->prepare($sql_print_post);
						    $donnees_post_affichage = $req_post_affichage->fetch();

							} 

						catch(Exception $e) 
							{
							
							   echo "<br>ERREUR ! ".$e->getMessage()."<br>";
							   echo "<br>params : <br>";
							}
							
							echo "<div class='post_affichage'>
									".$donnees_post_affichage."
								  </div>
								  ";

							print_r($donnees_post_affichage);

							$title = $donnees_post_affichage['title'];

							echo $title;

							



						

							
?>
Mais rien ne s'affiche et aucune erreur :/ Pourtant il y a bien quelque chose dans ma base de donnée ...

Voilà , si quelqu'un a une idée merci à vous :)

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

05 mai 2016, 23:20

Bonsoir,

Entre prepare() et fetch(), il faut également penser à exécuter la requête ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 6 Messages

05 mai 2016, 23:26

Bonsoir,

Merci de ta réponse , j'ai rajouter ce que je pense être juste c'est à dire comme ceci.
$sql_print_post = 'SELECT * FROM post';
						try 
							{

						    $req_post_affichage = $bdd->prepare($sql_print_post);
						    $req_post_affichage->execute($sql_print_post);
						    $donnees_post_affichage = $req_post_affichage->fetch();

							} 

						catch(Exception $e) 
							{
							
							   echo "<br>ERREUR ! ".$e->getMessage()."<br>";
							   echo "<br>params : <br>";
							}
							
							echo "<div class='post_affichage'>
									".$donnees_post_affichage."
								  </div>
								  ";

							print_r($donnees_post_affichage);

							$title = $donnees_post_affichage['title'];

							echo $title;
Est-ce comme cela ? Si oui j'ai ce message d'erreur :

Code : Tout sélectionner

Warning: PDOStatement::execute() expects parameter 1 to be array, string given in /home/u588207568/public_html/post.php on line 14
Merci de ton aide :)

EDIT : Ou est-ce plutôt comme cela
$req_post_affichage = $bdd->prepare($sql_print_post);
						    $req_post_affichage_test->execute($req_post_affichage);
						    $donnees_post_affichage = $req_post_affichage_test->fetch();

Mammouth du PHP | 1967 Messages

06 mai 2016, 11:11

Je pense que c'est plutot comme ceci :
$req_post_affichage = $bdd->prepare($sql_print_post);
                $req_post_affichage->execute(array());
                $donnees_post_affichage = $req_post_affichage->fetch();
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

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

06 mai 2016, 13:01

Ca a effectivement peu d'intérêt dans ton cas, mais pour exécuter une requête préparée, il faut lui passer un tableau de valeur à utiliser dans la requête. En l'occurrence tu n'utilises aucune variable dans ta requête et il n'est pas forcément très cohérent d'utiliser une requête préparée pour cela (ni d'ailleurs pour exécuter des requêtes qu'une seule fois :))

La méthode query() de PDO semble mieux adaptée à ton cas, bien que prepare() + execute() fonctionneront quand même avec les compléments de Spols :)

A savoir : la requête préparée a pour objectif d'optimiser l'exécution d'un nombre important de requêtes identiques avec des valeurs différentes. Si la requête ne contient pas de valeurs ou n'est exécutée qu'une seule fois, les requêtes préparées ne devraient pas être utilisées. Cet usage a cependant été détourné, car les valeurs transmises dans les requêtes préparées sont automatiquement délimitées si nécessaire (chaines passées entre apostrophes) et protégées (ajout d'un antislash devant les apostrophes pour les chaines...)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 6 Messages

06 mai 2016, 13:50

Merci à vous j'ai réussi à faire ce que je voulais grâce à vous ! :)

Et un grand merci pour les explications ^^