Bonjour,

je viens d'heberger mon site cakephp chez ovh, mon site fonctionne bien localement mais à distance lorsque je voulais visualiser une université , on m'affiche comme erreur le fichier containableBehavior.php est introuvé, pour remedier à ce problème j'ai créé ce fichier,

<?php
class containableBehavior extends ModelBehavior {

}

mais apres avoir créé ce fichier lorsque je clique sur la liste des modules (telque public $hasAndBelongsToMany = array('University ');) j'ai rencontré l'erreur suivante

Database Error

Error: 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 'contain' at line 1

SQL Query: contain.

avez vous une idée la dessus, et merci à l'avance.

6 réponses


Lartak
Réponse acceptée

Tu ne dois pas créer de classe ContainableBehavior, si tu as l'erreur comme quoi la classe n'est pas trouvé, c'est tout simplement que tu utilises le Behavior Containable dans une requête, mais tu as dù oublier de charger le comportement.
Vu que tu n'as pas précisé la version concernée, c'est que ça doit être la V2 :

Isselmoumg
Auteur
Réponse acceptée

Merci Lartak,
effectivement vous avez raison, j'ai supprimé ContainableBehavior , et j'ai changé juste le c minuscule à C majuscule au niveau du model 'Containable'.
Merci éncore

Bonsoir je sollicite votre aide car je planche sur une erreur depuis 2 jours maintenant

Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'posts as Post WHERE online=1 AND type="post"' à la ligne 1 in C:\wamp\www\Site\Tuto\core\Model.php on line 74
Voici le code source

<?php 
class Model{
    static $connections = array();
    public $conf = 'default';
    public $table = false;
    public $db;
    public $primarykey = 'id';

    public function __construct(){
        if($this->table === false){
        $this->table = strtolower(get_class($this)).'s';
    }
        $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['databases'].';',
                $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).' ';

        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 = '"'.addslashes($v).'"';//mysql_real_escape_string(),$v = '"'.addslashes($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));
    }
    public function findCount($conditions){
        die (print_r($this->findFirst(array(
            'fields' => 'COUNT('.$this->primarykey.') as count',
            'conditions' => $conditions
        ))));
    }
}

?>

``

dans ce code " $pre->execute(); "est celui de ma ligne 74

Bonjour.
Même si tu rencontres approximativement la même erreur de MySQL, ton problème n'étant pas lié au Framework CakePHP, tu aurais du créé un sujet dans le forum PHP.
De plus, que si ton code est issu d'un tutoriel de Grafikart, il serait judicieux de lé préciser en donnant par exemple le lien vers le tutoriel concerné.

Advanced table tennis robotics provide https://about.me/brianhigdon A wonderful aspect of all designs of the Butterfly Amicus.