Die Datenbankabfragen mit PHP sind das spannendste und umfangreichste Kapitel, das es über die Zusammenarbeit der beiden Sprachen MySQL und PHP gibt. Deswegen wird dieser Artikel auch etwas länger, damit wir auch alles unter bekommen.
Eine allgemeine Abfrage beginnt immer mit dem MySQL Befehl SELECT * FROM Tabellennamen. Das Sternchen steht für alle Spalten, die es in der Tabelle gibt. Diese einfache Form würde erst einmal alles ausgeben, was sich in der Tabelle befindet.
Der dazugehörige Code sieht wie folgt aus:
$ausgabe = mysql_query($sql) or die(“Konnte die Abfrage nicht durchführen, weil “ . mysq_error());
while($row = mysql_fetch_object($ausgabe)){
echo ‘<table><tr><td>’;
echo $row->Vorname;
echo ‘</td><td>’;
echo $row->Nachname;
echo ‘</td><td>’;
echo $row->Ort;
echo ‘</td><td>’;
echo $row->;Bemerkung;
echo ‘</td></tr></table>’;
}
Die Abfrage stellt kein großes Problem dar, der Aufwand entsteht durch die while Schleife, die alle gefundenen Datensätze nun ausgeben soll.
In der while Schleife verwenden wir die Funktion mysql_fetch_object. Alternativ kann man auch mysql_fetch_array verwenden, dann wird ein Array ausgegeben.
Bei der Ausgabe muss mann dann auch $row->Vorname in $row['Vorname'] umändern.
Nur eine Datenbank ohne Filterfunktion wäre sinnlos, da könnte man genau so gut alle Daten auf seitenweise Papier schreiben und Datensätze per Hand raussuchen. Deswegen gibt es verschiedene Filterfunktionen, die ich an dieser Stelle nun vorstellen möchte.
WHERE, LIKE, BETWEEN, ORDER BY
WHERE Spaltename=Wert
WHERE ist die häufigste Filterfunktion und wird auch in Verbindung mit LIKE und BETWEEN benötigt.
Eine Abfrage könnte zum Beispiel so aussehen:
$sql = ‘SELECT * FROM test_blubber WHERE Vorname=”Claudia”‘;
$abfrage = mysql_query($sql) or die(“Fehler: “ . mysql_error());
while($row = mysql_fetch_object($abfrage))
{
// hier kommt die Ausgabe
}
?>
In dieser Abfrage werden alle Datensätze ausgegeben, die die Zeichenkette Claudia in der Spalte enthalten. Zeichen müssen in Anführungszeichen gesetzt werden, Zahlen hingegen nicht.
WHERE … AND/OR …
Natürlich kann man auch mehrere Spalten miteinander verbinden, das ist möglich mit AND und OR.
$sql = ‘SELECT * FROM test_blubber WHERE Vorname=”Claudia” AND Nachname=”Fischer”‘;
$abfrage = mysql_query($sql) or die(“Fehler: “ . mysql_error());
while(…)
{…}
?>
Mit dieser Abfrage bekommen wir nur ein Ausgabe, wenn ein Datensatz der Vorname=Claudia und Nachname=Fischer zutreffend ist, sonst nicht.
Wollen wir die Suche nun verändern und möchten jetzt alle Datensätze anzeigen lassen, die mit Vorname Claudia oder die mit Nachname Stifter heißen, ersetzen wir das AND durch ein OR.
$sql = ‘SELECT * FROM test_blubber WHERE Vorname=”Claudia” OR Nachname=”Stifter”‘;
$abfrage = mysql_query($sql) or die(“Fehler: “ . mysql_error());
while(…)
{…}
?>
Es wird in der Datenbank nach allen Datensätzen gesucht, die entweder den Vornamen Claudia enthalten oder den Nachnamen Stifter. Das Ergebnis wäre:
Claudia Fischer und Norbert Stifter.
WHERE … LIKE …
Weiter geht es mit LIKE, das weniger was mit mögen zu tun hat, sondern die Bedeutung “wie” hat. WHERE Vorname LIKE “PETER”
// oder auch
$sql = ‘SELECT * FROM test_blubber WHERE Vorname LIKE “Pe%”‘;
Mit LIKE kann man nach Inhalten suchen, die man nur teilweise kennt. Es gibt die Möglichkeit Platzhalter zu verwenden. Einen Unterstrich der für genau ein Zeichen steht, dann gibt es noch das Prozentzeichen, dies steht für eine beliebige Anzahl von Zeichen.
Wo der Platzhalter steht ist dabei egal, er kann auch vor einer Zeichenkette stehen oder vorne und hinten, wie man ihn benötigt.
// oder auch
$sql = ‘SELECT * FROM test_blubber WHERE Vorname LIKE “%et%”‘;