par
yann18 » 25 mars 2013, 16:47
bonjour,
j'ignore la portée d'une variable globale dans une classe certainement elle doit être la source de ton problème.d'après l'erreur, la méthode execute() de ta méthode query() n'est défini nulle part car $db n'est pas vu comme un objet pdo.
si tu veux apppeler la variable db qui est l'attribut de ta classe il faut utiliser $this->db;
<?php
define('DB_HOST', 'localhost');
define('DB_DATABASE', 'tests');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', 'root');
define('DB_CHARSET', 'utf8');
class DBMySQL{
public $db;
public $sql;
private $dbhost = DB_HOST;
private $dbuser = DB_USERNAME;
private $dbpass = DB_PASSWORD;
private $dbname = DB_DATABASE;
private $dbcharset = DB_CHARSET;
public function __construct(){
try{
$this->db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_DATABASE, DB_USERNAME, DB_PASSWORD,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES " .$this->dbcharset));
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
echo "Connexion réussie<br />";
}catch(Exception $e){
echo "Connexion pas réussie<br />";
echo "Erreur : ".$e->getMessage()."<br />";
echo "N° : ".$e->getCode();
}
}
public function query($sql){
// global $db;
$stmt = $this->db->prepare($sql);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_OBJ);
}
}
?>
par ailleurs, tu doit appeller ta méthode query() sans faire un fetchAll() car la méthode query() de ta classe sait déjà retourner un tableau d'objets:
$db = new DBMySQL();
$data = $db->query("SELECT * FROM regions");
var_dump($data);
bonjour,
j'ignore la portée d'une variable globale dans une classe certainement elle doit être la source de ton problème.d'après l'erreur, la méthode execute() de ta méthode query() n'est défini nulle part car $db n'est pas vu comme un objet pdo.
si tu veux apppeler la variable db qui est l'attribut de ta classe il faut utiliser $this->db;
[php]
<?php
define('DB_HOST', 'localhost');
define('DB_DATABASE', 'tests');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', 'root');
define('DB_CHARSET', 'utf8');
class DBMySQL{
public $db;
public $sql;
private $dbhost = DB_HOST;
private $dbuser = DB_USERNAME;
private $dbpass = DB_PASSWORD;
private $dbname = DB_DATABASE;
private $dbcharset = DB_CHARSET;
public function __construct(){
try{
$this->db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_DATABASE, DB_USERNAME, DB_PASSWORD,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES " .$this->dbcharset));
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
echo "Connexion réussie<br />";
}catch(Exception $e){
echo "Connexion pas réussie<br />";
echo "Erreur : ".$e->getMessage()."<br />";
echo "N° : ".$e->getCode();
}
}
public function query($sql){
// global $db;
$stmt = $this->db->prepare($sql);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_OBJ);
}
}
?>
[/php]
par ailleurs, tu doit appeller ta méthode query() sans faire un fetchAll() car la méthode query() de ta classe sait déjà retourner un tableau d'objets:
[php]
$db = new DBMySQL();
$data = $db->query("SELECT * FROM regions");
var_dump($data);
[/php]