Call to a member function prepare() on a non-object
Salut à tous.
Je suis en train d'essayer un truc classique avec PDO : appeler des classes et les hydrater avec des données.
J'utilise un modèle que j'utilise sur pas mal d'autres sites à moi et après plusieurs heures de recherches : j'en reviens à vous.
La page qui pose probleme me renvoie le message :
Citation:
Fatal error: Call to a member function prepare() on a non-object in /homepages/33/d498484054/htdocs/class/modele.class.php on line 11
Voici l'extrait de la page en question :
crea.php
Code:
1 2 3 4 5
| $id = intval($_GET['id']);
$query = $db->query("SELECT id from crea where id = ".$id."");
if($result = $query->fetch()){
$crea = new Crea($result['id']);
(...) |
Avant cela je fait appel à server.php :
Code:
1 2 3
| session_start();
$db = new PDO('mysql:host=xxx;dbname=xxx;charset=utf8','xxx','xxx', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
include_once('class/import.php'); |
Qui lui même fait appel à import.php pour inclure les classes "Crea" et "Modele"
Code:
1 2
| include_once("modele.class.php");
include_once("crea.class.php"); |
crea.class.php :
Code:
1 2 3 4 5 6 7 8 9 10 11
| <?php
class Crea extends Modele{
public function __construct($id){
$this->addKey("id");
$this->addKey("title");
$this->addKey("description");
$this->addKey("link");
$this->tableName = "crea";
parent::__construct($id);
}
} |
...et enfin le debut de modele.class.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <?php
class Modele{
public $table = array();
protected static $db;
public $tableName="none";
protected $error=false;
public function __construct($value){
$this->addKey("id");
$obj =self::$db->prepare("SELECT * FROM ".$this->tableName." WHERE id=?;"); // Erreur ici
$obj->execute(array($value));
if($obj->rowCount()==1){
$obj->setFetchMode(PDO::FETCH_OBJ);
foreach ($obj->fetch() as $key => $value)
$this->hydratePrivate($key,$value);
}
else if($value=!-1)
$this->error="Aucun élément trouvé: id=".$value."(".$this->tableName.")";
}
public static function setPdo($_db){
self::$db = $_db;
}
(...) |
Donc pour moi : il veux me dire que $db n'existe pas : HORS je l'ai bien déclaré dans server.php non ?
J'ai vérifié mes includes si il n'y avait pas un soucis de sous répertoires ou une connerie du genre mais apparemment non !
PDO est marqué comme activé dans phpinfo().
Je suis chez *soupir* 1&1.
Comme je l'ai dit j'ai déja utiliser cette structure des dizaines de fois et c'est la première fois que je galère sur un truc pareil !
Help !
Merci d'avance :)