Daten aus Datenbank per PHP abfragen

Wir wollen die Datenbank nun auslesen. Dazu wird eine Abfrage (eng. „query“ = Abfrage, Anfrage, Ersuchen) an die Datenbank gesendet.

$erg = $db->query("SELECT * FROM kontakte");

Ich schreibe gerne die Datenbank-Befehle groß, damit diese sich von PHP und den Daten abheben.

Über diese Anweisung sagen wir:

  • SELECT auswählen
  • * alle Datenbankfelder
  • FROM aus der Tabelle mit dem folgenden Namen
  • kontakte uns gewählter Tabellenname.

Die Datenbank selber müssen wir hier nicht mehr angeben, dass diese bereits im Vorfeld ja über die Anweisungen in der Datei „db.php“ bestimmt wurden.

Sollten wir nicht alle Datenbankfelder benötigen, können wir diese anstelle des Asterix * angeben

$erg = $db->query("SELECT id, vorname, nachname FROM kontakte");

Um herauszubekommen, ob die Abfrage erfolgreich war, kann das zurückgegebene Ergebnis mit print_r() ausgegeben werden.

<?php
require 'inc/db.php';
echo "<h1>Programm Adressbuch</h1>";
$erg = $db->query("SELECT id, vorname, nachname FROM kontakte");
print_r($erg);
?>

Als Rückgabe bekommen wir ein „Ergebnis-Objekt“.

Kontrollausgabe mysql_result Objekt
Kontrollausgabe mysql_result Objekt

Hier sehen wird die Anzahl der Felder (field_count) und die Anzahl der verfügbaren Datensätze (num_rows).

Wenn die Anzahl der Datensätze also mehr als Null ist, hat unsere Abfrage geklappt.

Dies können wir somit einfach abfragen über:

$erg = $db->query("SELECT id, vorname, nachname FROM kontakte");
print_r($erg);
if ($erg->num_rows) {
	echo "<p>Daten vorhanden: Anzahl ";
	echo $erg->num_rows;
}

Als Ergebnis des Auslesens der Datenbank sehen wir die Rückmeldung und die Anzahl der Datensätze:

Daten vorhanden: Anzahl 2

Wenn ein Fehler in der SQL-Abfrage, dann erhalten wir keine Datensätze – sprich wir kommen nicht in die if-Schleife. Hier könnte sich ein else anbieten.

Grundsätzlich haben wir also über diese Variante keine Fehlermeldung durch die SQL-Anweisung, sondern einfach nur „es sind Daten da oder es sind KEINE Daten da“.

Wir können über folgenden Aufbau ermitteln, ob ein Fehler vorliegt.

$erg = $db->query("SELECT id, vorname, nachname FROM kontakteee")
	or die($db->error);

Jetzt kommt als Meldung „table ‚adressbuch.kotakteee’ doesnt exist“. Man sieht also in welcher Datenbank welche Tabelle nicht existiert.

Table 'adressbuch.kontakteee' doesn't exist

Andere Fehlermeldungen sind bei SQL-Fehlern und Fehlern bei Spaltennamen.

Natürlich wollen wir auch diese Fehlermeldungen nicht den späteren Nutzern präsentieren.