1. #1

    Registered
    01/08/02
    Posts
    134
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    2/2

    PDO connectie met DB

    Hey allemaal

    Ik probeer me de laatste tijd te verdiepen in meer php/mysql. Ik lees heel veel, maar weet dat je vooral het meeste leert door het gewoon te schrijven, te doen.
    Sommigen zullen dit wel als het wiel opnieuw uitvinden zien, maar ik leer echt massa's bij door dingen gewoon zelf te proberen te schrijven. De bedoeling is dat ik vooral classes etc meer ga gebruiken en onder de knie krijg.

    Ik probeer nu om mijn mysql verbindingen met PDO te doen. Mijn class staat hieronder, maar wil nog niet werken. Iemand enig idee wat er fout is?

    PHP Code:
    class Database
    {

        private 
    $db_type;

        private 
    $db_host;
        
        private 
    $db_user;
        
        private 
    $db_password;
        
        private 
    $db_naam;

        
    /* Constructor */

        
    public function __construct($db_type$db_host$db_user$db_password$db_naam)
        {
            
    $this->type $db_type;
            
    $this->naam $db_naam;
            
    $this->host $db_host;
            
    $this->password $db_password;
            
    $this->user $db_user;        
        }

        
    /* Connecteer met Database */

        
    private function connect()
        {
        
            try{
                
    $dsn $this->type.':host='.$this->host.';dbname='.$this->naam.'';
                
    $db_connect = new PDO($dsn$this->user$this->password); 
                
    $db_connect->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
                
    $db_connect->setAttribute(PDO::ATTR_CASEPDO::CASE_NATURAL);
            }
            
            catch (
    PDOException $e) {
                echo 
    'PDO Exception: '.$e->getMessage();
            }
            
        }

            

    Ik roep ze aan met

    PHP Code:
    $db = new Database('mysql''localhost''****''****''****'); 

    $sql 'SELECT setting, inhoud FROM cms_settings';

    foreach (
    $db->query($sql) as $row) {
        print 
    $row['setting'] .' - '$row['inhoud'] . '<br />';

    Last edited by little; 06-05-2011 at 01:29. Reason: -
    {Designing your digital home} bubblefish.be {Design and illustration}
    no votes   Reply With Quote Reply With Quote

  2. #2
    Bv202's Avatar
    Registered
    10/12/06
    Location
    Antwerpen
    Posts
    3,721
    iTrader
    4 (100%)
    Mentioned
    0 Post(s)
    Hey,

    De bedoeling is dat ik vooral classes etc meer ga gebruiken en onder de knie krijg.
    Hier gaat het mis. Blijkbaar heb je toch nog niet volledig door hoe OO werkt

    Eerst en vooral wordt je methode connect() nooit opgeroepen, waardoor er nooit een PDO-verbinding gemaakt wordt. Aangezien je deze verbinding waarschijnlijk meteen wilt maken bij het aanmaken van het Database-object, kan je de methode simpelweg oproepen vanuit de constructor:
    PHP Code:
    $this->connect(); 
    De tweede fout is dat je PDO-object niet bijgehouden wordt, maar nadat de connect()-methode voltooid is, weer vernietigd zal worden. Wat je moet doen is dit object bijhouden als een data member zodat je deze kunt gebruiken in de query()-methode (welke overigens niet in je stuk code staat).

    Een derde fout is dat je in je constructor enkele data members initialiseert, maar deze bestaan helemaal niet. Je data member noemt bijvoorbeeld $db_type, terwijl je $type probeert te initialiseren.
    Last edited by Bv202; 06-05-2011 at 01:53.
    ...
    no votes   Reply With Quote Reply With Quote

  3. #3
    Fr3aK's Avatar
    Registered
    17/07/02
    Location
    Antwerpen
    Posts
    2,614
    iTrader
    0
    Mentioned
    0 Post(s)
    PHP Code:
    class Database
    {

        private 
    $type;
        private 
    $host;
        private 
    $user;
        private 
    $password;
        private 
    $name;

        
    /* Constructor */

        
    public function __construct($db_type$db_host$db_user$db_password$db_name)
        {
            
    $this->type $db_type;
            
    $this->name $db_naam;
            
    $this->host $db_host;
            
    $this->password $db_password;
            
    $this->user $db_user;
            
    $this->connect();
        }

        
    /* Connecteer met Database */

        
    private function connect()
        {
            try{
                
    $dsn $this->type.':host='.$this->host.';dbname='.$this->name;
                
    $db_connect = new PDO($dsn$this->user$this->password); 
                
    $db_connect->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
                
    $db_connect->setAttribute(PDO::ATTR_CASEPDO::CASE_NATURAL);
            }
            
            catch (
    PDOException $e) {
                echo 
    'PDO Exception: '.$e->getMessage();
            }
        }

    Niet vergeten om uw query-methode ook nog te definiƫren anders zal $db->query() ook ni veel doen
    no votes   Reply With Quote Reply With Quote

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in