TP Refactoring : MysqDatabase

Par Bessino, il y a 9 ans


Bonjour,

je suis actuellement entrain de suivre la formation de POO php et je suis au chapitre refactoring. Mais je suis bloquer car j'ai une erreur que je n'arrive pas du tout à résoudre. PLEASEEEEEE!!!!

voici le code erreur :

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '?' at line 4 in E:\Serveurs\www\Blog2\core\Database\MysqlDatabase.php:36 Stack trace: #0 E:\Serveurs\www\Blog2\core\Database\MysqlDatabase.php(36): PDO->query('\r\n\t\t\tSELECT art...') #1 E:\Serveurs\www\Blog2\core\Table\Table.php(43): Core\Database\MysqlDatabase->query('\r\n\t\t\tSELECT art...', 'App\Entity\Arti...', false) #2 E:\Serveurs\www\Blog2\app\Table\ArticleTable.php(18): Core\Table\Table->query('\r\n\t\t\tSELECT art...') #3 E:\Serveurs\www\Blog2\pages\articles\home.php(4): App\Table\ArticleTable->getLast() #4 E:\Serveurs\www\Blog2\public\index.php(19): require('E:\Serveurs\www...') #5 {main} thrown in E:\Serveurs\www\Blog2\core\Database\MysqlDatabase.php on line 36

Et mon voici les code de mon fichier MysqlDatabase.php

<?php namespace Core\Database; use \PDO; class MysqlDatabase extends Database{ private $db_name; private $db_user; private $db_pass; private $db_host; private $pdo; public function __construct($db_name, $db_user = 'root', $db_pass = 'bessino95', $db_host = 'localhost'){ $this->db_name = $db_name; $this->db_user = $db_user; $this->db_pass = $db_pass; $this->db_host = $db_host; } private function getPDO(){ if($this->pdo === null){ $pdo = new PDO('mysql:dbname=blog;host=localhost', 'root', 'bessino95'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $this->pdo = $pdo; } return $this->pdo; } public function query($statement, $class_name = null, $one = false){ $req = $this->getPDO()->query($statement); if($class_name === null){ $req->setFetchMode(PDO::FETCH_OBJ); } else { //fetch style $req->setFetchMode(PDO::FETCH_CLASS, $class_name); } if($one){ $datas = $req->fetch(); } else { $datas = $req->fetchAll(); } return $datas; } public function prepare($statement, $attributes, $class_name, $one = false){ $req = $this->getPDO()->prepare($statement); $req->execute($attributes); $req->setFetchMode(PDO::FETCH_CLASS, $class_name); if($one){ $datas = $req->fetch(); } else { $datas = $req->fetchAll(); } return $datas; } }

3 réponses

Lartak, il y a 9 ans

Bonjour.
Montres nous plutôt la requête que tu fais, car d'après l'erreur la base de données reçoit quelque chose comme : '\r\n\t\t\tSELECT art...' et à priori c'est lorsque tu fais appel à ta méthode getLast de App\Table\ArticleTable.

Bessino, il y a 9 ans

Bonjour et merci Lartak,

voici le code de ma classe ArticleTable, mais je ne vois pas du tout c'est quoi l'erreur de mon code :

<?php namespace App\Table; use Core\Table\Table; class ArticleTable extends Table{ // permet de récupérer les dernieres articles public function getLast(){ return $this->query("SELECT articles.id, articles.titre, articles.contenu, categories.titre as categorie FROM articles LEFT JOIN categories ON articles.categorie_id = categories.id WHERE articles.id = ? "); } }
Bessino, il y a 9 ans

Merci Lartak,

j'ai réussi à résoudre mon problème.

:)