PDO - Methoden - Die PDO-Klasse - query
1. Suchen
Die Methode query
ist ausschließlich für SELECT
-Anweisungen gedacht. Für INSERT
, UPDATE
,
REPLACE
oder DELETE
sollte man die schon erwähnte exec
-Methode nutzen.
Der Rückgabewert
Die query
-Methode gibt ein PDOStatement
-Objekt(!) zurück. Und das ist vor allem für Anfänger ein Problem, da
sie laut Doku eigentlich zur PDO
-Klasse gehört. Und darum existieren auch verschiedene Möglichkeiten, um die Ergebnisse zu
verarbeiten.
2. Standardnutzung
$pdo = new PDO ($server, $user, $password);
$query = 'SELECT bla FROM blubb WHERE ID > 600';
foreach ($pdo -> query($query) as $row) {
print_r($row);
}
Das hier läuft vom Prinzip her genau so ab wie bei der MySQLi-Erweiterung.
3. Der Rückgabewert
Ein query
liefert als Ergebnis ein Objekt der PDOStatement
-Klasse zurück. Jetzt werden sich sicher einige fragen,
was der Blödsinn soll. Nun das ist ganz einfach zu erklären. Denn damit kann man die fetch
-Methoden dieser Klasse nutzen.
Allerdings wurde gründlich aufgeräumt und von den 8 Methoden bei MySQLi sind hier nur noch 4 übrig geblieben. Außerdem zeige ich euch hier
nur das Prinzip anhand eines Beispiels. Die Details kommen erst im Abschnitt über die PDOStatement
-Klasse.
4. Zugriff auf fetchIrgendwas
Dazu benötigt man ähnlich wie bei MySQLi eine Referenzvariable, um die entsprechenden Methoden nutzen zu können.
$pdo = new PDO ($server, $user, $password);
$query = 'SELECT bla, blubb FROM blubber WHERE ID > 601';
$stmt = $pdo -> query($query);
$result = $stmt -> fetchAll();
print_r ($result);
Erläuterung
Das Prinzip funktioniert genau wie bei MySQLi. In diesem Fall speichert man die Referenz auf den Rückgabewert von query
,
also einem PDOStatement
-Objekt, in einer Variablen ab. Und über die greift man dann auf die entsprechenden(!)
fetch
-Methoden zu.
Das Ergebnis
... ist ein Array, in dem jeder Datensatz noch mal als numerisches und alphanumerisches Array abgespeichert worden ist. Daraus folgern wir
was? Ganz einfach, ohne Parameter beim fetchAll
arbeitet diese Methode genau wie fetch_all
von MySQLi und einem
mysql_fetch_all
der MySQl-Erweiterung. Gottlob kann man das wunderbar steuern, und zwar über Parameter. Aber dazu komme ich
später.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt