La POO en PHP : Création des classes Table

Par Manide, il y a 10 ans


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

zkiller, il y a 10 ans

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

Manide, il y a 10 ans

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!

Tarik El Jabiri, il y a 10 ans

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, il y a 10 ans

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.

Defy, il y a 10 ans

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, il y a 10 ans

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, il y a 10 ans

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)