Bonjour suite au tutoriel L'objet PDO en PHP j'ai désider de maître a jour le code du site que je suis en-train de créer.

Voici l'erreur :
Fatal error: Call to a member function query() on a non-object in F:\Sites\SggCms\Config\funtion.php on line 34
Call Stack

Time Memory Function Location

1 0.0006 269296 {main}( ) ..\index.php:0
2 0.0024 338400 SggCms->SggCms( ) ..\index.php:5

Voici le code :

class SggCms {
  /**
   * variable de connection.
   *
   * @var string
   */
  public $cpconnect;
  /**
   * variable du cms.
   *
   * @var string
   */
  public $sggcms;
  function connect($id) {
    global $cpconnect;
    try {
      $DB = new PDO("mysql:host={$cpconnect$id]'host']};dbname={$cpconnect$id]'database']}", "{$cpconnect$id]'user']}", "{$cpconnect$id]'password']}");
      $DB->exec("SET CHARACTER SET {$cpconnect$id]'encoding']}");
      $DB->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
      echo "The database is not available, please try again later. <br/> Error code: " . $e->getMessage() . "<br>"
      . "La base de donnéer n'est pas disponible, Merci de rééssayer plus tard.<br/>Code erreur: " . $e->getMessage() . "<br>"
      . "La base de datos no está disponible, por favor inténtelo de nuevo más tarde. <br/> Código de error: " . $e->getMessage();
    }
    /*$database = mysql_connect($cpconnect$id]'host'], $cpconnect$id]'user'], $cpconnect$id]'password']) or die ("<div style=\"text-align: center;\">Error ! Database connexion failed<br />Check your user's name/password</div>");
    $connect = mysql_select_db($cpconnect$id]'database'], $database) or die ("<div style=\"text-align: center;\">Error ! Database connexion failed<br />Check your database's name</div>");*/
  }

  function SggCms() {
    global $cpconnect;
    $this->connect(1);
    try {
      $sql_conf = $DB->query("SELECT name, value FROM config");
      while ($data_conf = $sql_conf->fetch(PDO::FETCH_OBJ)) {
        $this->SggCms$data_conf->name] = htmlentities($data_conf->value, ENT_NOQUOTES);
        unset($sql_conf, $data_conf);
      }
    } catch (PDOException $e) {
      echo "La request a planter<br>Code erreur: " . $e->getMessage();
    }
    /*$sql_conf = mysql_query("SELECT name, value FROM config");
    while ($data_conf = mysql_fetch_array($sql_conf)) $this->SggCms$data_conf'name']] = htmlentities($data_conf'value'], ENT_NOQUOTES);
    unset($sql_conf, $data_conf);*/
  }
  function UserId($User, $Mail) {
    $IdUser = sha1(md5("{$User}|{$Mail}"));
    return $IdUser;
  }
}

6 réponses


RedaElkhayat
Réponse acceptée

Tu as utilisé la variable $DB dans la méthode SggCms sans définir sa valeur. donc lui il ne trouve pas la fonction query().
ce que je propose, Si tu as bien connecté a ta base de donnée de faire un return de $DB.
et dans ta fonction SggCms tu crées une variable $DB

$DB = $this->connect(1); // a la place de $this->connect(1);
Gs Angelus
Auteur
Réponse acceptée

Bonjour vous m'avais mis sur la vois merci a vous.
Voici l'erreur :

while ($data_conf = $sql_conf->fetch(PDO::FETCH_OBJ)) {
        $this->SggCms$data_conf->name] = htmlentities($data_conf->value, ENT_NOQUOTES);
        unset($sql_conf, $data_conf);
      }

et la correction :

while ($data_conf = $sql_conf->fetch(PDO::FETCH_OBJ)) {
        $this->SggCms$data_conf->name] = htmlentities($data_conf->value, ENT_NOQUOTES);
      }
      unset($sql_conf, $data_conf);

ou encore :

while ($data_conf = $sql_conf->fetch(PDO::FETCH_OBJ)) $this->SggCms$data_conf->name] = htmlentities($data_conf->value, ENT_NOQUOTES);
unset($sql_conf, $data_conf);

Bonjour j'ai remplacer le

$this->connect(1);

par

$DB = $this->connect(1);

Puis mise un

return $DB;

dans la function connect du coup il ma donner set erreur :
SCREAM: Error suppression ignored for
( ! ) Fatal error: Call to a member function fetch() on a non-object in F:\Sites\SggCms\Config\funtion.php on line 41
Call Stack

Time Memory Function Location

1 0.0004 269296 {main}( ) ..\index.php:0
2 0.0015 338184 SggCms->SggCms( ) ..\index.php:5
mais actuellement a la line 41 il y a :

while ($data_conf = $sql_conf->fetch(PDO::FETCH_OBJ)) {

La je voix pas d'ou peux venir l'errer.
Si il vous faux le code complet dit le

Salut je viens de googler un peu et sur la doc Php de PDO :
PDO::query() retourne un objet PDOStatement , ou FALSE en cas d'erreur ... et FALSE n'est pas un objet !
Tu dois probablement avoir une erreur dans la syntaxe de ta requète SQL .
Essaye un var_dump pour voir.
A+
Oliv

ou encore sur ce même forum:
grafikart.fr/forum/topic/4268