Hauptmenü

Untermenü

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