PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] Tutorial: PDO Klasse benutzen



c4pone
19.08.2010, 11:48
Hi leute ich hatte mir gedacht ich schreib mal ein kleines Tut wie man die PDO Klasse in PHP verwenden kann :)

Was ist PDO:


PDO bietet eine Abstraktionsschicht für den Datenzugriff, das bedeutet, dass Sie, egal welche Datenbank Sie benutzen, dieselben Funktionen verwenden können, um Abfragen zu erstellen und Daten zu lesen. PDO bietet keine Abstraktion für Datenbanken. Es schreibt keine SQL-Abfragen um oder emuliert fehlende Features. Sie sollten eine komplette Abstraktionsschicht verwenden, wenn Sie diese Funktionalität benötigen.
PDO wird mit PHP 5.1 ausgeliefert und ist als PECL-Erweiterung für PHP 5.0 verfügbar.

PDO benötigt die neuen OO-Features im Kern von PHP 5 und wird deswegen nicht mit früheren Versionen von PHP funktionieren.
Vorraussetzungen:
min. PHP5
PDO(ist eigentlich ab PHP5 standartmäßig dabei)
Treiber für die zu verwendene Datenbank.

Installation:
Ok bevor, wir starten zeig ich euch noch schnell wie ihr die Treiber für Datenbank bekommt. Ich benutze hier den Mysql treiber

Linux:
Unter Linux ist es eigentlich ziemlich einfach Treiber nachzuinstallieren da die meißten treiber über apt nachinstalliert werden können
Beispiel: sudo apt-get install php5-mysql

Windows:
Unter Windows hab ich bis jetzt noch nicht mit php gearbeitet aber soweit ich weiß kann man die entstprechenden Treiber bei der Installation von php5 im setup auswählen

Alternative:
1.Es gibt die Möglichkeit die Treiber über die PHP.ini verfügbar zu machen indem man die Treiber in die extension_dir von php kopiert und sie in der php.ini über extension=treibername.dll lädt.
2.Man kann die Treiber auch über die dl Methode laden
3.Man komplimiert sich PHP5 mit den entsprechenden treiber includes (hab ich selber noch nie versucht)


Anwendung:
OK Los gehts
1.Connecting



<?php
$db_host = '127.0.0.1';
$db_name = 'test_db';
$username = 'c4pone';
$password = 'awesome';
$conString = 'mysql:host='.$db_host.';dbname='.$db_name;
try
{
$pdo = new PDO($conString,$username,$password);
}catch(PDOException ex)
{
//Fehlerbehandlung
}

?>OK von oben nach unten,
als erstes definiere ich ein paar variablen host,dbname,username,password. (sollte eigentlich verständlich sein).
Dann kommt was neues der connection string. Der Connection String wird benötigt um PDO zu sagen wie,wo und mit was er sich verbinden soll.
Ich benutze in diesem Beispiel Mysql. Viel gibt es zu dem String nicht zu sagen da er eigentlich selbsterklärend ist.
Als nechstes erzeuge ich eine Instanz der PDO Klasse und übergebe dem Konstruktur als erstes den con string gefolgt von Username und Password.
Wenn ein Fehler beim verbinden auftaucht wird eine PDOException geworfen !!

2.Einfache Queries


<?php
$name = "test";
$users = $pdo->query('SELECT * FROM users name='.$name);
?>Pdo bietet die möglichkeit über die methode query abfragen zu erstellen wie man es gewohnt ist. Zurück bekommt man bei default nen Array.

3.Prepared Statements
So jetzt kommen wir zu den lustigen Dingen.

Als erstes mal ein einfach SELECT

Alle User mit dem Namen c4pone von der Tabelle users


$username = "c4pone";
$stmt = $pdo->prepare("SELECT * FROM users WHERE name = :suchmich");
$stmt -> bindParam(':suchmich', $username);
$stmt->execute()
$users = $stmt->fetchAll();
Wieder von oben nach unten
$username enthält den name nach dem wir suchen möchten.
Jetzt erzeugen wir mit der prepare methode ein Statement und speichern das in der variable $stmt.
Wie ihr seht ist es eine normale SQl Abfrage bis auf das name = :suchmich.
Denn :suchmich ist ein Platzhalter der für eine Variable steht.
Diese Variable muss ich natürlich meinem Statement bekannt machen. Dies tue ich über die bindParam() Methode.
Der erste Parameter der Methode ist der Platzhalter den ich eine Variable zuweisen möchte(in meinem fall :suchmich).
Der zweite Parameter ist die Variable die ich anfügen möchte _> $username .
Natürlich kann man auch mehr als einen Platzhalter benutzen.(SELECT * FROM users WHERE name = :user and password = :pw)
Zuguter letzt kommt noch ein execute was im Fehlerfall -1 zurück gibt und ein fetchAll was uns einen Array mit Daten liefert.

4.Verbindung beenden


//$pdo == pdo objekt
$pdo = null;//verbindung beendet
nc


Natürlich war das nicht alles was PDO zubieten hat(Stichwort: Transactionen) , jedoch wollte ich euch nur einen kleinen Einblick verschaffen :)
Wer interesse auf mehr bekommen hat kann hier noch ne ganze Menge mehr finden PHP: PDO - Manual (http://www.php.net/manual/en/book.pdo.php)

Kritik erwünscht
gruß c4pone