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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Fatal error: Uncaught Error: Call to a member function fetch() on bool in

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

par JF_01 » 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

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

par JF_01 » 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

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

par or 1 » 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 ?

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

par JF_01 » 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: