[RESOLU] Fatal error: Uncaught Error: Call to a member function fetch() on bool in

Petit nouveau ! | 3 Messages

03 août 2019, 16:21

Tout d'abord bonjour à tous 8-) :D ,


Voilà, je suis nouveau dans le milieu du développement. J'ai commencé à trouvé un engouement il y'a plus ou moins 1 ans et demi par la suite, j'ai entrepris une formation en dévellopement web que j'ai eu fini il y'a pas longtemps.

Comme cela, j'ai un peu fais les présentations :P

En gros je vais commencer à travailler sur un mini projet et je suis passer par ici (pour trouver des réponses à mon projet):
https://openclassrooms.com/fr/courses/9 ... -mini-chat

Je sais que cette erreur est assez fréquentes. Alors, j'ai essaye des PDP statement, fetch All et compagnie rien y fait.
J'aurai aimé un petit coup de main pour cette ligne : while ($donnees = $reponse->fetch()) car c'est elle qui me met en erreur et je ne vois pas pour quel raison.
Au niveau des collones de ma BD je pense que c'est ok j'ai vérifié donc aucunes erreurs de syntaxes ;).

Je vous donnes les code des 2 fichiers qui se trouve dans le lien que je vous ai donné ici plus haut:

minichat.php

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Mini-chat</title>
</head>
<style>
form
{
text-align:center;
}
</style>
<body>

<form action="minichat_post.php" method="post">
<p>
<label for="pseudo">Pseudo</label> : <input type="text" name="pseudo" id="pseudo" /><br />
<label for="message">Message</label> : <input type="text" name="message" id="message" /><br />

<input type="submit" value="Envoyer" />
</p>
</form>

<?php
// Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}

// Récupération des 10 derniers messages
$reponse = $bdd->query('SELECT pseudo, message FROM minichat ORDER BY ID DESC LIMIT 0, 10');

// Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
while ($donnees = $reponse->fetch())
{
echo '<p><strong>' . htmlspecialchars($donnees['pseudo']) . '</strong> : ' . htmlspecialchars($donnees['message']) . '</p>';
}

$reponse->closeCursor();

?>
</body>
</html>


minichat_post.php

<?php
// Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}

// Insertion du message à l'aide d'une requête préparée
$req = $bdd->prepare('INSERT INTO new_chat (pseudo, message) VALUES(?, ?)');
$req->execute(array($_POST['pseudo'], $_POST['message']));

// Redirection du visiteur vers la page du minichat
header('Location: minichat.php');
?>

Merci d'avance pour votre retour :lol:

Mammouth du PHP | 2703 Messages

03 août 2019, 16:36

while ($donnees = $reponse->fetch())
le message d'erreur dit que $reponse est un boléan.
https://www.php.net/manual/fr/pdo.query.php retourne false en cas d'erreur. il y a donc une erreur dans la requête sql.

$reponse = $bdd->query('SELECT pseudo, message FROM minichat ORDER BY ID DESC LIMIT 0, 10');
$req = $bdd->prepare('INSERT INTO new_chat (pseudo, message) VALUES(?, ?)');

quelle est le bon nom de la table ?

Petit nouveau ! | 3 Messages

03 août 2019, 19:02

while ($donnees = $reponse->fetch())
le message d'erreur dit que $reponse est un boléan.
https://www.php.net/manual/fr/pdo.query.php retourne false en cas d'erreur. il y a donc une erreur dans la requête sql.

$reponse = $bdd->query('SELECT pseudo, message FROM minichat ORDER BY ID DESC LIMIT 0, 10');
$req = $bdd->prepare('INSERT INTO new_chat (pseudo, message) VALUES(?, ?)');

quelle est le bon nom de la table ?
Tout d'abord, merci pour ta réponse ;)

Ben écoute sur le code d'origine, il dit qu'il appelle le nom de la table "minichat". Moi j'ai appelé la base de donnée "minichat" et la table "new_chat".
De mon côté, je pensais que c'était du au fait que dans ma table j'avais mis le champ "id" en minuscule. Je l'ai donc changé en majuscule comme dans ma requête (code qui se trouve dans minichat.php) ;).

Mais je ne vois pas qu'est ce qu'il y'a comme erreur dans la requête sql, je cherche depuis hier 14h lol

Petit nouveau ! | 3 Messages

03 août 2019, 22:09

Voilà j'ai trouvé la solution, c'était ma connexion à la base de donnée :

J'ai mis cela : $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');

Et il fallait mettre celui-là : $bdd = new PDO('mysql:host=localhost;dbname=chat;charset=utf8', 'root', '');

En gros, comme j'avais déjà une BD "test", ma BD "chat" se connectait avec celle-ci ;)

Et c'est pas de bol, car le code de openclassrooms appelé justement dbname : "test"

Merci à vous quand même