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.

3 réponses


Digikube
Réponse acceptée

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).' ';
Daemon
Auteur

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.