Bonsoir,
Voilà j'ai une erreur encore que je ne trouve pas qui est :
PHP Warning: PDOStatement::execute(): 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 '==2' at line 1 in /Applications/MAMP/htdocs/Site-admin-php/core/Model.php on line 63.
Quand je teste dans Model.php après le constrution de la conditions par un die($sql);, j'ai à l'affichage ceci :
SELECT * FROM posts as Post WHERE id==2
il me met 2 signes = je ne devrais en avoir qu'un.
Je ne trouve pas le problème.
Code de Model.php :

<?php
class Model{

        static $connection = array();

        public $conf = 'default';
        public $table = false;
        public $db;

        public function __construct(){
            // Jme connecte à la base
            $conf = Conf::$databases[$this->conf];
            if (isset(Model::$connection[$this->conf])){
                $this->db = Model::$connection[$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::$connection[$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');
            }

        }
        // J'initialise qques variable
        if($this->table === false){
            $this->table = strtolower(get_class($this)).'s';
        }
    }
    public function find($req){
        $sql = 'SELECT * 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);
            }
        }
        die($sql);
        $pre = $this->db->prepare($sql);
        $pre->execute();
        return $pre->fetchAll(PDO::FETCH_OBJ);
    }

    public function findFirst($req){
        return current($this->find($req));
    }
}
?>

merci

2 réponses


macinsteph
Auteur
Réponse acceptée

Désolé j'ai résolu mon problème, en faite dans PagesController.php j'avais une erreur de syntax au niveau de :

'conditions' => array('id'=>$id)

Bonsoir,

Je pense plutôt que le problème viens de l'appel du find...