PHP PDO Mysql

Résolu/Fermé
peice Messages postés 45 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 17 août 2009 - 31 août 2008 à 05:38
 qqq - 24 sept. 2010 à 23:41
Bonjour,
je tente de créer une classe de connexion pour MySQL avec les PDO. Mais j'ai un problème lorsque j'appelle certaines fonctions. Voici ma classe :

class dbConn {

   public $dsn;
   public $dbh;
   public $database;
   public $host;
   public $username;
   public $password;
   
   public function __constructor($host, $username, $password, $database) {	
          $this->host = $host;
          $this->database = $database;
          $this->username = $username;
          $this->password = $password;
      
	  $this->dsn = 'mysql:host='.$host.'dbname='.$database;  
	  self::connect();   
   }
   
   public function connect() {
   
      try {
	     $this->dbh = new PDO($dsn, $this->username, $this->password);
	     $this->dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, TRUE);
	     $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      } catch (PDOException $e) {
	     echo 'Erreur: ' . $e->getMessage();
	  }
   
   }
   
   public function getInstance() {
      return ($this->dbh);
   }
   
}


Ensuite, j'appelle cet objet dans une autre partie du code:

          $connexion = new dbConn('localhost', '***********','**********','******');
	  
	  $dbh = $connexion->getInstance();
	 	  
	  $sql = "SELECT * FROM *** WHERE email = :username AND password = :password LIMIT 1";	  
	  
	  
	  $stmt = $dbh->prepare($sql);
	  
	  $stmt->setFetchMode(PDO::FETCH_OBJ);
	  
	  $stmt->bindParam(':username', $this->username);
	  $stmt->bindParam(':password', $this->password);
	  $stmt->execute();
	  
	  $result = $stmt->fetchAll();
	  
	  foreach ($result as $row) {
	     echo $row->first_name . '  ' . $row->last_name; 
	  }


Et là j'obtiens ce message: Fatal error: Call to a member function prepare() on a non-object in

Je ne comprends pas, pourtant je fais appel au DBH de ma classe de connexion, et c'est comme si il ne reconnaissait pas l'objet.. Quelqu'un peut m'aider?

Merci

3 réponses

jugurtha Developpeur
3 sept. 2008 à 15:34
voila, je croix que votre code est correcte mais il y'a quelques erreurs syntaxique:
premiere erreur
public function __construct($host, $username, $password, $database)
2eme erreur
$this->dsn = 'mysql:host='.$host;'dbname='.$database;//ajout d'un poin vergule
3eme erreur
$this->dbh = new PDO($this->dsn, $this->username, $this->password);//il faut ecrire $this->dsn
4eme erreur
pour ma part je prefere de faire
$stmt->execute(array(':username' =>$this->username,':password'=>this->password));
au lieu
$stmt->bindParam(':username', $this->username);
$stmt->bindParam(':password', $this->password);
$stmt->execute();
voila ma reponse est close
de toute facon chez moi ca marche
bonne courage de la part : jugurtha.
6
peice Messages postés 45 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 17 août 2009 9
31 août 2008 à 13:17
Très aidant comme commentaire... Merci.
-1
Profil bloqué
31 août 2008 à 09:52
!!!!
-6
J'ai cette fonction en ajax pour faire liste liee qui ne retourne pas resultat

/**
* Méthode qui retourne les info d'une région selon son id
*
* @param int $id
* @return array
*/
public function getRegionById($id)
{
$prepare = $this->prepare('SELECT region_id, region_name
FROM region
WHERE region_id = "'.$id.'"');
$prepare->execute();
$region = $prepare->fetchAll();

return $region;
}

Je veux avoir une aide
Merci de me répondre si quelqu'un peu
0