Thread: PDO connectie met DB
-
06-05-2011, 01:29 #1
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?
Ik roep ze aan metPHP 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_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db_connect->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL);
}
catch (PDOException $e) {
echo 'PDO Exception: '.$e->getMessage();
}
}
}
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
-
-
06-05-2011, 01:40 #2Approved 9liver
- Registered
- 10/12/06
- Location
- Antwerpen
- Posts
- 3,721
- iTrader
- 4 (100%)
- Mentioned
- 0 Post(s)
Hey,
Hier gaat het mis. Blijkbaar heb je toch nog niet volledig door hoe OO werktDe bedoeling is dat ik vooral classes etc meer ga gebruiken en onder de knie krijg.
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:
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).PHP Code:$this->connect();
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
-
06-05-2011, 15:15 #3Niet vergeten om uw query-methode ook nog te definiƫren anders zal $db->query() ook ni veel doenPHP 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_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db_connect->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL);
}
catch (PDOException $e) {
echo 'PDO Exception: '.$e->getMessage();
}
}
}
no votes
Reply With Quote
