Bonjour,

Je me sers de ce tutoriel pour récupérer la manière de faire des catégories pour les articles. Tout ce passe bien jusqu'à environ 11min.
J'ai bien les noms des différentes catégories qui s'affichent sous le titre de chaque article . Cependant, pour récupérer toutes les catégories et les afficher, j'ai une belle erreur

"Notice: Undefined variable: pdo in G:\Virtualhosts\Manide\www\app\database.php on line 28"

L'erreur ne vient pas du fichier database mais de ce code qui se trouve sur blog.php:

<?php foreach(\NetFun\table\categorie::all() as $categories): ?>

L'appel de all() se fait vers la page table.php.

<?php
  namespace NetFun\table;
  use NetFun\App;
  class Table{
    protected static $table;
    public static function all(){
      return App::getDb() -> query("SELECT * FROM ".static::$table."", __CLASS__);
    }

Quelqu'un aurait une idée? je bute dessus depuis 2h....

Merci d'avance.

7 réponses


Manide
Auteur
Réponse acceptée

Ah...désolé.

Je mets les pages concernées : (édit)
Le problème venait de la classe table.

Class Table (avant correction)

<?php
  namespace NetFun\table;
  use NetFun\App;
  class Table{
    protected static $table;
    public static function all();
      return App::getDb()->query("SELECT * FROM ".self::$table."", __CLASS__);
    }
 ?>

Class Table (après correction)

<?php
  namespace NetFun\table;
  use NetFun\App;
  class Table{
    public static function all(){
      return App::getDb()->query('SELECT *FROM   categories', __CLASS__);
    }
 ?>

Le double quote et ".self::$table." étaient les responsables

Merci pour les aides.

Bonne journée!

Ont voie pas assez de code pour t'aider :/

Salut essayer cette fonction

<?php
private function getPDO(){
        if($this->pdo==null){
        $pdo = new PDO('mysql:dbname=********;host=******', '********','*******');
        $this->pdo = $pdo;
        $this->pdo->exec("SET CHARACTER SET utf8");
        $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
        return $this->pdo;
}
Manide
Auteur

Bonjour Tarik,

Merci pour ton aide. Cependant cela ne fonctionne pas, j'ai deux erreurs :

( ! ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1' in G:\Virtualhosts\Manide\www\app\database.php on line 34

( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 in G:\Virtualhosts\Manide\www\app\database.php on line 34

Je vais continuer a chercher et si quelqu'un à une illumination, je suis preneur XD.

Ben la il te dit que tu as une erreur de syntax MySql a la ligne 34 de database.php. Elle correspond a quoi cette ligne?

Manide
Auteur

Salut Defy,

A ça :

            public function query($statement, $class_name){
 l.34     $req = $this->getPDO()->query($statement);
             $datas = $req->fetchAll(PDO::FETCH_CLASS, $class_name);
             return $datas;
    }
Manide
Auteur

J'ai modifié la l.34 comme suit :

$req = $this->pdo->getPDO()->query($statement);

Et maintenant j'ai cette erreur :
Fatal error: Call to a member function getPDO() on a non-object in G:\Virtualhosts\Manide\www\app\database.php on line 34

Et du coup je n'ai plus rien du tout (même les articles ont disparu)