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;
}
}
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.
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 = ?
");
}
}