[RESOLU] Classe database en pdo avec requêtes préparées

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Classe database en pdo avec requêtes préparées

Re: Classe database en pdo avec requêtes préparées

par Cypher_PHP » 25 mars 2013, 17:06

merci
ça marche

merci beaucoup

Re: Classe database en pdo avec requêtes préparées

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);

Classe database en pdo avec requêtes préparées

par Cypher_PHP » 25 mars 2013, 16:14

Bonjour

Je suis en train de m'entrainer à créer une classe database en pdo avec des requêtes préparées.
je ne trouve pas beaucoup concernant les classes concernant les requêtes préparées en pdo sur internet.


J'ai tenté quand même et je savais que j'allais être coincé face à ce message d'erreur :
Fatal error: Call to undefined method DBMySQL::prepare() in ....
voici mon code
<?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{
			$db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_DATABASE, DB_USERNAME, DB_PASSWORD,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES " .$this->dbcharset));
			$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 = $db->prepare($sql);             
        $stmt->execute();             
        return $stmt->fetchAll(PDO::FETCH_OBJ);        
    }
    
}
?>
<?php
                        $db = new DBMySQL();
                        $select = $db->query("SELECT * FROM regions");
                        $data = $select->fetchAll();
                        var_dump($data);
                    ?>
je vous remercie beaucoup de votre aide ;)