PDO in OOP
Ik ben bezig met een beveilings classe. Hierbij wil ik de PDO classe gebruiken voor de communicatie naar mijn database.
Kan ik in een constructor een connectie maken met de db, en die var gebruiken in de rest van mijn functies? Zoja hoe?
Ik had een var in een classe gezet, vervolgens connectie met die db gemaakt via PDO. Echter, als ik het in een andere functie wil gebruiken werkt dit niet.
$db = var met connectie
$this->db->exec('QUERY') werkt dan niet.
Of moet ik per functie weer opnieuw gaan connecten etc etc?
Graag voorbeelden hoe je dit het beste aanpakt. Bij onduidelijkheid post ik wat code.
Mvg.
$db = var met connectie
$this->db->exec('QUERY') werkt dan niet.
kijk, bedoel je dan niet dat het zo wordt:
$db->exec('QUERY') werkt dan niet.
?
En nee, je hoeft niet voor elke functie weer opnieuw gaan connecten
Je kunt hiervoor het beste een registry klasse gebruiken. In de constructor kan je die dan aanroepen. Als er al verbinding is, zal de bestaande verbinding teruggegeven worden. Als er nog geen verbinding is, wordt die gemaakt en teruggegeven.
Singleton instance van een Databasemanager, welke diverse connecties kan onderhouden met verschillende databases, en verschillende abstraction layers.
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
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
<?php
class Auth
{
var $db;
public function __construct()
{
$this->db = new PDO('mysql:host=localhost;dbname=**','**','**');
}
public function login ($username, $password)
{
$qAttempt = $this->db->exec('INSERT INTO login_attempts (ip_address,
username,
password,
date)
VALUES
('.$_SERVER['REMOTE_ADDR'].',
'.$this->db->quote($username).',
'.$this->db->quote($password).',
NOW())');
/*
Omdat de variable overal aan te moten spreken is binnen deze klasse, definieer ik heb ook hierboven. Echter spreek je hem aan als $this->var.
Omdat die var weer met het PDO te maken heeft en er functies zijn binnen die classe probeer ik die dus aan te roepen via $this->db->quote().
Hoe kan ik het beste gebruik maken van het PDO klasse in mijn eigen klasse zonder elke keer per functie een connectie te maken?
*/
}
}
?>
class Auth
{
var $db;
public function __construct()
{
$this->db = new PDO('mysql:host=localhost;dbname=**','**','**');
}
public function login ($username, $password)
{
$qAttempt = $this->db->exec('INSERT INTO login_attempts (ip_address,
username,
password,
date)
VALUES
('.$_SERVER['REMOTE_ADDR'].',
'.$this->db->quote($username).',
'.$this->db->quote($password).',
NOW())');
/*
Omdat de variable overal aan te moten spreken is binnen deze klasse, definieer ik heb ook hierboven. Echter spreek je hem aan als $this->var.
Omdat die var weer met het PDO te maken heeft en er functies zijn binnen die classe probeer ik die dus aan te roepen via $this->db->quote().
Hoe kan ik het beste gebruik maken van het PDO klasse in mijn eigen klasse zonder elke keer per functie een connectie te maken?
*/
}
}
?>
nu heb ik het gewoon zo:
Nico, ik heb precies hetzelfde hierboven, maar dat vinden ze niet echt leuk :P
Momenteel gebruik je PHP4 en 5 door elkaar heen, ik raad je aan om het bij PHP5 te houden.
Gebruik dus public / protected / private in plaats van var bij properties.
@midas: Er is geen beste methode, ieder heeft zelf zijn favoriete methode. Ik zelf hou namelijk niet echt van een Registry.
$this->db->query of $this->db->exec werken ook niet. Krijg echter ook geen foutmeldingen.
Ik heb laatste tijd alleen maar zulke rare fouten, dus ik zal eens met mijn host bellen wat er aan de hand is.