Bonjour à tous.
Je suis en train de réaliser le tuto et au jour n°4 (16 min 55), j'obtiens cet erreur:
Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'FROMposts aspost WHERE online=1 AND type="page"' à la ligne 1 in K:\Programme\Easyphp\EasyPHP-5.3.9\www\Monsite\core\model.php on line 90
J'ai lu, relu le code.
Il est identique au tuto.
<?php
class model
{
static $connections = array();
public $conf = 'default';
public $table = false;
public $db;
public $primarykey = 'id';
public function __construct()
{
// J'initialise quelques variables
if ($this->table === false)
{
$this->table = strtolower(get_class($this)).'s';
}
// Je me connecte à la base
$conf = conf::$databases$this->conf];
if(isset(model::$connections$this->conf]))
{
$this->db = model::$connections$this->conf];
return true;
}
try {
$pdo = new PDO('mysql:host='.$conf'host'].';dbname='.$conf'database'].';',
$conf'login'],
$conf'password'],array(PDO::MYSQL_ATTR_INIT_COMMAND=> 'SET NAMES utf8'));
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
model::$connections$this->conf] = $pdo;
$this->db = $pdo;
}
catch(PDOException $e)
{
if(conf::$debug >=1)
{
die($e->getMessage());
}
else
{
die('Impossible de se connecter à la base de donnée');
}
}
}
public function find($req)
{
$sql = 'SELECT ';
if(isset($req'fields']))
{
if(is_array($req'fields']))
{
$sql .= implode(', ',$req'fields']);
}
else
{
$sql .= $req'fields'];
}
}
else
{
$sql .= '*';
}
$sql .= ' FROM'.$this->table.' as'.get_class($this).' ';
// Construction de la condition
if(isset($req'conditions']))
{
$sql .= 'WHERE ';
if(!is_array($req'conditions']))
{
$sql .= $req'conditions'];
}
else
{
$cond = array();
foreach($req'conditions'] as $k=>$v)
{
if(!is_numeric($v))
{
$v = '"'.mysql_escape_string($v).'"';
}
$cond] = "$k=$v";
}
$sql .= implode(' AND ', $cond);
}
}
$pre = $this->db->prepare($sql);
$pre->execute();
return $pre->fetchAll(PDO::FETCH_OBJ);
}
public function findfirst($req)
{
return current($this->find($req));
}
public function findcount($conditions)
{
print_r ($this->find(array('fields' => 'COUNT('.$this->primarykey.')','conditions' => $conditions)));
die();
}
}
?>
Pouvez-vous m'aider?
Merci.
Il s'agit de la requête SQL mal construite ligne 66 ici :
$sql .= ' FROM'.$this->table.' as'.get_class($this).' ';
A remplacer par (erreur d'espace):
$sql .= ' FROM '.$this->table.' as '.get_class($this).' ';
Merci pour la solution.
En effet, cela fonctione maintenant.
Je n'avais pas vu l'erreur.
Et je n'aurais jamais pensé qu'une erreur d'espace à cet endroit donnerai une erreur.
Merci. ;)
C'est souvent dû à des choses pas très importantes qu'on se prend le chou pendant de longues heures.