Database class met PDO

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Yearupie Achternaamloos

Yearupie Achternaamloos

21/12/2009 19:08:00
Quote Anchor link
Beste phpers,

Omdat enkele mensen mij adviseerde om PDO te gaan leren heb ik dat maar gedaan. Maar nu wil ik een Class maken waarin ik een database connectie maak en waar ik bijvoorbeeld een SELECT query kan uitvoeren.

Ik heb het zover gekregen dat hij een verbinding maakt met de database, nu ik een select query uit wil laten voeren gaat het mis.

Weet iemand hoe ik dat kan oplossen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
class database{
  var
$hostname = "xxx.xxx.com";
  var
$database = "xxx_xxx";
  var
$username = "xxx_xxx";
  var
$password = "xxxxxxx";
  
  function
connect(){
            
      try {
                    
        $dbh = new PDO("mysql:host=$this->hostname;dbname=$this->database;", $this->username, $this->password);
        echo 'Connected to database';        
    }

        catch(PDOException $e){
            
        echo $e->getMessage();        
    }
  }
  function
select_query($sql){
      $result = $dbh->query($sql);
      $result = $result->fetch(PDO::FETCH_OBJ);
      return $result;
  }
}


$db = new database;
$db->connect();
$members = $db->select_query("SELECT * FROM members");
foreach($members AS $member)
{

    echo $member->username;
}

?>


Quote:
Connected to database
Fatal error: Call to a member function query() on a non-object in /home/www/spel-martijn-ruben.warzz.com/php/database_class.php on line 21
Gewijzigd op 01/01/1970 01:00:00 door Yearupie Achternaamloos
 
PHP hulp

PHP hulp

22/12/2024 11:35:37
 
Roy

roy

21/12/2009 19:19:00
Quote Anchor link
Het is handig om je database gegevens hier niet op het forum neer te zetten ;).
Maar het probleem is dat alle variabele die in een functie worden aanmaakt, nadat de functie klaar is, worden verwijderd.
Dus als je in de functie connect() $dbh aanmaakt, dan wordt die verwijderd als de funtie klaar is. Als je daarna de functie select_query($sql) aanroept, dan kent hij de variabele $dbh niet meer.
En haal de variabelen op regel 12 buiten haakjes, dat is netter.
 
Yearupie Achternaamloos

Yearupie Achternaamloos

21/12/2009 19:23:00
Quote Anchor link
roy schreef op 21.12.2009 19:19:
Het is handig om je database gegevens hier niet op het forum neer te zetten ;).
Maar het probleem is dat alle variabele die in een functie worden aanmaakt, nadat de functie klaar is, worden verwijderd.
Dus als je in de functie connect() $dbh aanmaakt, dan wordt die verwijderd als de funtie klaar is. Als je daarna de functie select_query($sql) aanroept, dan kent hij de variabele $dbh niet meer.
En haal de variabelen op regel 12 buiten haakjes, dat is netter.

Ik dacht er nog zo aan dat ik het eruit moest halen, maar ik was het vergeten :|
Hoe kan ik dit dan oplossen? Kan ik dat niet doen met de $dbh global te maken en dat er dus voor te zetten?

edit: werkt niet
Gewijzigd op 01/01/1970 01:00:00 door Yearupie Achternaamloos
 
Roy

roy

21/12/2009 19:31:00
Quote Anchor link
Je moet de variabele buiten de functie zetten(op de plek waar je nu ook je database gegevens heb staan).
Dan kan je in de functie connect() die variabele aanpassen($this->varNaam = ....).
Omdat je die variabele buiten de functie heb aangemaakt wordt hij niet verwijderd als de functie klaar is.

Je database gegevens zou je ook in de functie connect() kunnen neer zetten, die heb je na de functie namelijk niet meer nodig ;).
 
Yearupie Achternaamloos

Yearupie Achternaamloos

21/12/2009 19:41:00
Quote Anchor link
Bedankt, het werkt :)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
class database{
  
  var
$dbh;
  function
connect(){
      
      $hostname = "";
      $database = "";
      $username = "";
      $password = "";          
              
      try {
        $this->dbh = new PDO("mysql:host=".$hostname.";dbname=".$database.";",$username, $password);
        echo 'Connected to database';        
    }

        catch(PDOException $e){
            
        echo $e->getMessage();        
    }
  }
  function
select_query($sql){
      $result = $this->dbh->query($sql);
      $result = $result->fetch(PDO::FETCH_OBJ);
      return $result;
  }
}


$db = new database;
$db->connect();
$members = $db->select_query("SELECT * FROM members");
foreach($members AS $member)
{

    echo $member->username;
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Yearupie Achternaamloos
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.