php fetch Erreur while fetch

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour

Je suis en train de suivre un cour de PHP et je me retrouve coincé à l'ouverture de ma page avec :

Fatal error: Uncaught Error: Call to a member function fetch() on boolean in C:\xampp\htdocs.....\admin\index.php:35 Stack trace: #0 {main} thrown in C:\xampp\htdocs\burgercode\admin\index.php on line 35

J ai vérifié l'écriture lettre après lettre et je n arrive pas à trouver mon erreur , pourriez vous me donner un coup de main

En vous remerciant par avance

ci dessous mon code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<?php
require 'Database.php';
$db = database::connect();
$statement = $db->query('SELECT items.id, items.name, items.description, items.price, category.name AS category FROM items LEFT JOIN categories ON items.category=categories.id ORDER BY items.id DESC');
while($item = $statement->fetch())
{
    echo '<tr>';
    echo '<td>'. $item['name'] .'</td>';
    echo '<td>'. $item['description'] .'</td>';
    echo '<td>'. $item['price'] .'</td>';
    echo '<td>'. $item['category'] .'</td>';    
    echo '</tr>';           
}

?>
+0 -0
Auteur du sujet

Merci pour la réponse , J ai pas trouvé l'erreur pour autant , d’où peut elle venir, de mon fichier de connexion sur la base ?

ci joint le code de connexion

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php

class Database
{

    private static $dbHost = "localhost";
    private static $dbName ="burger_code";
    private static $dbUser = "root";
    private static $dbUserPassword = "";

    private static $connection = null;


    public static function connect()
    {
            try
            {
                self::$connection = new PDO("mysql:host=" . self::$dbHost . ";dbName=" . self::$dbName,self::$dbUser,self::$dbUserPassword);
            }
            catch(PDOException $e)
            {
                    die($e->getMessage());
            }
            return self::$connection;
    }       

        public static function disconnect() 
        {
            self::$connection = null;
        }

}



?>
+0 -0

J'imagine que la ligne 35 de ton index.php est la ligne 5 de ton extrait de code ?

Tu as quoi quand tu actives les erreurs ?

1
2
3
<?php
// ajoute ça après la ligne 18 de ton second extrait de code
self::$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Édité par tleb

Writing your own code is superior to using someone else’s. Using someone else’s code is superior to writing your own. – Falsehoods

+0 -0
Auteur du sujet

merci pour ta réponse

J'ai ajouté la ligne

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php

class Database
{

    private static $dbHost = "localhost";
    private static $dbName ="burger_code";
    private static $dbUser = "root";
    private static $dbUserPassword = "";

    private static $connection = null;


    public static function connect()
    {
            try
            {

                self::$connection = new PDO("mysql:host=" . self::$dbHost . ";dbName=" . self::$dbName,self::$dbUser,self::$dbUserPassword);
                self::$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            }


            catch(PDOException $e)
            {
                    die($e->getMessage());
            }
            return self::$connection;
    }       

        public static function disconnect() 
        {
            self::$connection = null;
        }

}



?>

ligne 36 correspond

1
2
ORDER BY items.id DESC');
                                                while($item = $statement->fetch())

en réponse : Fatal error: Uncaught PDOException: SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected in C:\xampp\htdocs\burgercode\admin\index.php:36 Stack trace: #0 C:\xampp\htdocs\burgercode\admin\index.php(36): PDO->query('SELECT items.id…') #1 {main} thrown in C:\xampp\htdocs\burgercode\admin\index.php on line 36

+0 -0

dbname au lieu de dbName : je n'ai pas souvenir que les noms des paramètres du DSN soient insensibles à la casse auquel cas il ignorerait purement et simplement ce paramètre, te retrouvant sans base de données courante.

EDIT : PDO utilise strncmp pour trouver les (noms des) paramètres donc c'est sûr qu'ils ne sont pas case insensitive

Édité par vibrice

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte