Simple Datenabfrage per SELECT
Nachdem ihr die Datenbankverbindung aufbauen habt und diese in der Variable $pdo gespeichert habt, könnt ihr nun mittels der Funktion query($sql) eine Abfrage an die Datenbank senden.
Einfache Tabellenabfrage
<?php $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); $sql = "SELECT email, vorname, nachname FROM users"; foreach ($pdo->query($sql) as $row) { echo $row['vorname']." ".$row['nachname']."<br />"; echo "E-Mail: ".$row['email']."<br /><br />"; } ?>
Zuerst definieren wir unser SQL-Statement zur Abfrage der Datenbank. Dies geht mittels dem SQL-Befehl SELECT . SQL ist, wie in der Einführung zum MySQL Tutorial geschrieben, eine Datenbanksprache mit der wir Befehle an die Datenbank senden, beispielsweise zum Abfragen von Datensätzen oder zum bearbeiten von existenten Daten.
Die Syntax von SELECT ist ziemlich simpel. Zuerst geben wir Spalten an, die wir abfragen möchten, sowie den Tabellennamen. Diesen SQL-Befehl senden wir dann mittels $pdo->query() an die Datenbank. Zurück erhalten wir die Zeilen der Tabelle und können mittels Arrays die Zeilen durchlaufen und die Werte ausgeben. Jede Zeile der Tabelle tabellenname wird dann im Array $row abgespeichert.
Im obigen SQL-Statement haben wir die gewünschten Spalten angegeben. Wir können aber auch alle Spalten abfragen, indem wir ein * verwenden. Möchten wir die Daten aus unserer Nutzertabelle ausgeben, dann können wir dies wie folgt machen:
<?php $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); $sql = "SELECT * FROM users"; foreach ($pdo->query($sql) as $row) { echo $row['vorname']." ".$row['nachname']."<br />"; echo "E-Mail: ".$row['email']."<br /><br />"; } ?>
Daten sortieren
Möchten wir eine bestimmte Sortierung erreichen, dann können wir dies mittels der Anweisung ORDER BY erreichen.
<?php $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); $sql = "SELECT * FROM users ORDER BY vorname"; foreach ($pdo->query($sql) as $row) { echo $row['vorname']." ".$row['nachname']."<br />"; echo "E-Mail: ".$row['email']."<br /><br />"; } ?>
Dies würde die Benutzer nach der Spalte vorname, sprich, dem Vornamen, sortieren. Wir können eine Tabelle auch nach mehreren Spalten sortieren lassen. Möchten wir z.B. erst nach dem Vornamen, dann nach dem Nachnamen sortieren, dann geht dies wie folgt:
1 |
$sql = "SELECT * FROM users ORDER BY vorname, nachname"; |
ORDER BY sortiert standardmäßig alphabetisch von klein nach groß, also von 0 nach 9 oder von A nach Z. Möchten wir eine umgekehrte Sortierung haben, dann lässt sich dies mittels der Anweisung DESC erreichen:
1 |
$sql = "SELECT * FROM users ORDER BY id DESC"; |
Dieser SQL-Befehl gibt alle Benutzer aus, angefangen beim Benutzer mit der höchsten ID, sprich, dem neuesten Benutzer in unserer Tabelle.
Anzahl der Datensätze begrenzen
Bisher wurden immer alle Datensätze abgefragt. Dies ist bei sehr großen Tabellen mit vielen tausend oder Millionen Einträgen wenig wünschenswert. Dort möchten wir stattdessen oft beispielsweise nur die ersten 100 Einträge abfragen. Dazu können wir die LIMIT Anweisung verwenden.
<?php $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); $sql = "SELECT * FROM users ORDER BY vorname LIMIT 3"; foreach ($pdo->query($sql) as $row) { echo $row['vorname']." ".$row['nachname']."<br />"; echo "E-Mail: ".$row['email']."<br /><br />"; } ?>
Bei diesem Statement fragen wir unsere Nutzertabelle ab, sortiert nach dem Vornamen. Und wir erhalten hier nur drei Tabelleneinträge zurück. Statt drei könnt ihr auch jede beliebige andere Anzahl verwenden.
Falls ihr nicht unbedingt an den ersten drei Einträgen interessiert seid, sondern vielleicht an den Einträgen 5 bis 8, dann könnt ihr dies auch über LIMIT lösen:
1 |
$sql = "SELECT * FROM users ORDER BY vorname LIMIT 5, 3"; |
Hier geben wir zuerst einen Offset an, in diesem Fall die 5. Das bedeutet, MySQL wird die ersten 5 Einträge überspringen und euch dann 3 Einträge zurückliefern.
Autor: Nils Reimers