Résolu Fatal error: Call to a member function fetch() on a non-object

Statut
N'est pas ouverte pour d'autres réponses.

HaXGamiG

Développeurs
Premium
Inscription
12 Mai 2014
Messages
1 470
Réactions
323
Points
14 896
Bonjours, je voudrais afficher tout les message contenu dans ma base de donnée mais j'ai cette erreur qui s'affiche sur ma page : "
Fatal error: Call to a member function fetch() on a non-object in /var/www/message.php on line 6"

Voici le code :
PHP:
ini_set('display_errors', 'on');
require("class/class.php");
$bdd = new bdd();
$red = $bdd->query("SELECT * FROM message");
while($getInfo = $red->fetch(PDO::FETCH_ASSOC)){

}
 
Dernière édition:

Paul GTP

Légende vivante
VIP
Inscription
15 Août 2013
Messages
6 194
Réactions
7 545
Points
24 772
Salut,
Ton topic se trouvait dans la mauvaise section , je l'ai donc déplacé dans la bonne section :modo:

Je faisais cette erreur très souvent avant aussi, va savoir pourquoi ; je pense qu'il s'agit de la même chose chez toi :mmh:
$bdd->query() doit être remplacé par $bdd->execute()
Tu m'en diras des nouvelles :espion:



Bonne fin de soirée,
Paul GTP
 

HaXGamiG

Développeurs
Premium
Inscription
12 Mai 2014
Messages
1 470
Réactions
323
Points
14 896
Salut,
Ton topic se trouvait dans la mauvaise section , je l'ai donc déplacé dans la bonne section :modo:

Je faisais cette erreur très souvent avant aussi, va savoir pourquoi ; je pense qu'il s'agit de la même chose chez toi :mmh:
$bdd->query() doit être remplacé par $bdd->execute()
Tu m'en diras des nouvelles :espion:



Bonne fin de soirée,
Paul GTP
Autre erreur :
Fatal error: Call to undefined method bdd::execute() in /var/www/message.php on line 5
code :
PHP:
<?php
ini_set('display_errors', 'on');
require("class/class.php");
$bdd = new bdd();
$red = $bdd->execute("SELECT * FROM message");
while($getInfo = $red->fetch(PDO::FETCH_ASSOC)){

}
 

Paul GTP

Légende vivante
VIP
Inscription
15 Août 2013
Messages
6 194
Réactions
7 545
Points
24 772
J'ai pas vraiment compris ton code alors :mmh:
Essaie plutôt ça ; en admettant que sur ton code tu sois connecté à la bdd plus haut

Code:
<?php
// Connexion à la bdd
ini_set('display_errors', 'on');
require("class/class.php");
$red = $bdd->prepare("SELECT * FROM message");
$red->execute();
while($getInfo = $red->fetch(PDO::FETCH_ASSOC)){

}
?>
 

HaXGamiG

Développeurs
Premium
Inscription
12 Mai 2014
Messages
1 470
Réactions
323
Points
14 896
J'ai pas vraiment compris ton code alors :mmh:
Essaie plutôt ça ; en admettant que sur ton code tu sois connecté à la bdd plus haut

Code:
<?php
ini_set('display_errors', 'on');
require("class/class.php");
$red = $bdd->prepare("SELECT * FROM message");
$red->execute();
while($getInfo = $red->fetch(PDO::FETCH_ASSOC)){

}
?>
Si je met pas le $bdd = new bdd(); je serrait pas connecter a la base de donnée ;) je vais essayer
 

HaXGamiG

Développeurs
Premium
Inscription
12 Mai 2014
Messages
1 470
Réactions
323
Points
14 896
J'ai pas vraiment compris ton code alors :mmh:
Essaie plutôt ça ; en admettant que sur ton code tu sois connecté à la bdd plus haut

Code:
<?php
// Connexion à la bdd
ini_set('display_errors', 'on');
require("class/class.php");
$red = $bdd->prepare("SELECT * FROM message");
$red->execute();
while($getInfo = $red->fetch(PDO::FETCH_ASSOC)){

}
?>
Toujours la même erreur :
Fatal error: Call to a member function fetch() on a non-object in /var/www/message.php on line 6
Avec le prepare la variable red retourne "NULL"
Avec le query la variable red retourne un array
 

Paul GTP

Légende vivante
VIP
Inscription
15 Août 2013
Messages
6 194
Réactions
7 545
Points
24 772
Bon ; alors suite à ce que j'ai pu comprendre de ce que tu cherches à faire je t'ai codé ça.
PHP:
<?php
    $host = "HOST";
    $database = "NOM DB";
    $user = "NOM D'UTILISATEUR";
    $password = "MOT DE PASSE";

    try {
        $bdd = new PDO('mysql:host='.$host.';dbname='.$database.';charset=utf8', ''.$user.'', ''.$password.'');
    }

    catch (Exception $e) {
        die('Erreur : ' . $e->getMessage());
    }
  
    $id = $member['id']; // ou $id = $_SESSION['id']; par exemple, je sais pas comment tu gères ton code...
    $lirecommentaire = $bdd->prepare('SELECT * FROM commentaires WHERE idUtilisateur = :id ORDER BY date DESC');
    $lirecommentaire->execute(array('id' => $id));
    while ($commentaire = $lirecommentaire->fetch()) {
?>
    <div class="titre"><?php echo $commentaire['titre']; ?></div>
    <div class="message"><?php echo $commentaire['message']; ?> - <small>Message envoyé par <?php echo $commentaire['auteur']; ?></small></div>
<?php
    }
?>
Bon, le système de connexion à la base de donnée tu peux bien évidemment reprendre ta fonction $bdd mais j'aimerais que tu essaie avec ce système pour voir si le code fonctionne et tu pourras ensuite alors modifier le code pour faire à ta manière :p
Je pense que le code est compréhensible mais si tu as une question n'hésites pas ;)
 
Dernière édition:

HaXGamiG

Développeurs
Premium
Inscription
12 Mai 2014
Messages
1 470
Réactions
323
Points
14 896
PHP:
<?php
ini_set('display_errors', 'on');
session_start();
$_SESSION['username'] = "HaXGamiG";
 $host = "localhost";
    $database = "FrenchLandRP";
    $user = "root";
    $password = "";

    try {
        $bdd = new PDO('mysql:host='.$host.';dbname='.$database.';charset=utf8', ''.$user.'', ''.$password.'');
    }

    catch (Exception $e) {
        die('Erreur : ' . $e->getMessage());
    }

    $username = $_SESSION['username']; // ou $id = $_SESSION['id']; par exemple, je sais pas comment tu gères ton code...
    $lirecommentaire = $bdd->prepare('SELECT * FROM username WHERE receive = :username ORDER BY date DESC');
    $lirecommentaire->execute(array('username' => $username));
    while ($commentaire = $lirecommentaire->fetch()) {
        ?>
        <div class="message"><?php echo $commentaire['message']; ?> - <small>Message envoyé par <?php echo $commentaire['author']; ?></small></div>
        <?php
    }
?>
 

Paul GTP

Légende vivante
VIP
Inscription
15 Août 2013
Messages
6 194
Réactions
7 545
Points
24 772
Ta requête n'a pas vraiment l'aire correcte :mmh:
Code:
SELECT * FROM username WHERE receive = :username ORDER BY date DESC
Le but serait de sélectionner tous les messages de la table dans laquelle tu stockes les messages OÙ le nom d'utilisateur est :username TRIÉ PAR date DÉCROISSANTE.
Or, là tu vas chercher dans ta table username OÙ la table receive a pour valeur :username (ce qui n'a pas trop de sens).

Tu peux me montrer à quoi ressemble tes tables dans ta bdd ? :mmh:
 

HaXGamiG

Développeurs
Premium
Inscription
12 Mai 2014
Messages
1 470
Réactions
323
Points
14 896
Ta requête n'a pas vraiment l'aire correcte :mmh:
Code:
SELECT * FROM username WHERE receive = :username ORDER BY date DESC
Le but serait de sélectionner tous les messages de la table dans laquelle tu stockes les messages OÙ le nom d'utilisateur est :username TRIÉ PAR date DÉCROISSANTE.
Or, là tu vas chercher dans ta table username OÙ la table receive a pour valeur :username (ce qui n'a pas trop de sens).

Tu peux me montrer à quoi ressemble tes tables dans ta bdd ? :mmh:
Enfaite receive c'est le nom du receveur du message, et le nom quand il es connecter est stoquée dans session username
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut