Database class met PDO
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)
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
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;
}
?>
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
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
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.
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.
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
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 ;).
Code (php)
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
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;
}
?>
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