Trying to get

Par jeSuisUnNouchi, il y a 8 ans


Bonjour,

Voila je rencontre un petit problème avec mon code php.

suis en cours de developpmen d'un petit projet php mais je rencontré une erreur au niveau de mes class DB et topic1

**class DB** script pour les objets public function single(){ $this->execute(); return $this->stmt->fetch(PDO::FETCH_OBJ); } **class topic1 ** public function gettopic($id){ $this->db->query("SELECT topics.*, users.username, users.avatar FROM topics INNER JOIN users ON topics.user_id = users.id WHERE topics.id = :id "); $this->db->bind(':id', $id); $row = $this->db->single(); return $row; }

je voudrais les recuperer comme objet les elements des tables topics et users

Notice: Trying to get property of non-object in C:\xampp\htdocs\talkingespace\template\topic.php on line 23

je vous prie de m'aider svp merci a tous!!!

4 réponses

Lartak, il y a 8 ans

Bonsoir.
Tu devrais débuguer ta variable $row, ça te permettra de comprendre d'où vient ton problème.
Et puis tu devrais vraiment revoir la PDO.

jeSuisUnNouchi, il y a 8 ans

quand je debogue

$row

elle me return

bool(false)
jeSuisUnNouchi, il y a 8 ans

ca ce la class database

<?php /** * database */ class DB { private $host = DB_HOST; private $user = DB_USER; private $pass = DB_PASS; private $dbname = DB_NAME; private $dbh; private $error; private $stmt; public function __construct(){ // set DSN $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname; //set options $options = array( PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ); //create a new PDO instance try{ $this->dbh = new PDO ($dsn, $this->user, $this->pass, $options); } //catch any errors catch (PDOException $e) { $this->error = $e->getMessage(); } } public function query($query){ $this->stmt = $this->dbh->prepare($query); } public function bind($param, $value, $type = null){ if (is_null($type)) { switch (true) { case is_int ($value): $type = PDO::PARAM_INT; break; case is_bool($value): $type = PDO::PARAM_BOOL; break; case is_null($value): $type = PDO::PARAM_NULL; default : $type = PDO::PARAM_STR; } } $this->stmt->bindValue ($param, $value, $type); } public function execute(){ return $this->stmt->execute(); } public function resultset(){ $this->execute(); return $this->stmt->fetchAll(PDO::FETCH_OBJ); } public function single(){ $this->execute(); return $this->stmt->fetch(PDO::FETCH_OBJ); } public function rowCount(){ return $this->stmt->rowCount(); } public function lastInsertId(){ return $this->dbh->lastInsertId(); } public function beginTransaction(){ return $this->dbh->beginTransaction(); } public function endTransaction(){ return $this->dbh->commit(); } public function cancelTransaction(){ return $this->dbh->rollBack(); } }
neecride, il y a 8 ans

Houlla je comprend pas trop le soucis

mais je peut te filler un bout de ma class database

<?php class Database{ private $dbname; private $dbuser; private $dbhost; private $dbpass; private $pdo; public function __construct(){ require_once($_SERVER['DOCUMENT_ROOT']. DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR .'config.php'); $this->dbhost = DBHOST; $this->dbname = DBNAME; $this->dbuser = DBUSER; $this->dbpass = DBPSWD; } private function Getpdo(){ if($this->pdo === null){ try{ $pdo = new PDO("mysql:dbname={$this->dbname};host={$this->dbhost}",$this->dbuser,$this->dbpass,array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);//ou FETCH_ASSOC $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //exception or WARNING $this->pdo = $pdo; }catch(Exception $e){ /* echo $e->getMessage(); */ die('Imopsible de ce connecter a la BDD'); } } return $this->pdo; } //si besoin on a notre objet pdo public function thisPDO(){ return $this->Getpdo(); } public function Request($statement,$attrs=null,$one = null){ if($attrs != null){ $req = $this->getPDO()->prepare($statement); $req->execute($attrs); if($one === 1){ return $req->fetch(); }else{ return $req->fetchAll(); } }else{ //si attrs = null return query return $this->getPDO()->query($statement); } return null; } }

qui s'utilise comme ça : dans le premier paramette c'est le statement si tu n'a pas d'attribut ça fera un query, si tu un attribut un get id par exemple ça te fera un prepare et le dernier paramete si tu veut tout retourner tu laisse vide, sinon tu met 1 pour un seul résulta.

Les case when break etc... comprend pas trop et pourquoi faire 50 fonction pour une requette ?

ma fonction request te fait tout en un teste avec cette class.