www.PHP-Kurs.com

PHP lernen für Einsteiger
und Fortgeschrittene

PHP-Tutorial mit Videos

Sie befinden sich: Startseite » MySQL Tutorial - Datenbank unter PHP » Datenbankanwendung Schritt für Schritt programmieren » Ausgabe der Daten

Ausgabe der Daten

Jetzt können wir die Daten ausgeben – dazu gibt es verschiedene Möglichkeiten beim mysqli Ergebnisobjekt. Uns stehen verschiedene Möglichkeiten zur Verfügung.

$datensatz = $erg->fetch_assoc();

Über diese Anweisung fetch_assoc erhalten wir ein assoziatives Array – sprich ein Array mit sprechenden Namen als Keys. Ein „normales“ Array hat als Keys einfach Nummern von 0 angefangen. Unser Array bekommt als Keys die Namen der Tabellenspalten zugewiesen und ist somit wesentlich handlicher.

Für eine übersichtlichere Ausgabe lassen wir vor dem print_r($datensatz); noch ein über HTML ein <pre> ausgeben.

<?php
require 'inc/db.php';
echo "<h1>Programm Adressbuch</h1>";
$erg = $db->query("SELECT id, vorname, nachname FROM kontakte")
	or die($db->error);
print_r($erg);
if ($erg->num_rows) {
	echo "<p>Daten vorhanden: Anzahl ";
	echo $erg->num_rows;
}
$datensatz = $erg->fetch_assoc();
echo "<pre>";
print_r($datensatz);
echo "</pre>";
?>

Als Ergebnis sehen wir eine saubere Ausgabe:

erster Datensatz aus Datenbank ausgelesen
erster Datensatz aus Datenbank ausgelesen

Wir erhalten nur den ersten Datensatz angezeigt über fetch_assoc();

Wenn wir unsere Tabelle ansehen, ist klar, dass wir mehr als einen Datensatz haben.

allerdings mehr als ein Datensatz in der Datenbank vorhanden!
allerdings mehr als ein Datensatz in der Datenbank vorhanden!

Die Anweisung fetch_assoc() bringt uns nur einen Datensatz – fetch_all() gibt uns alle Datensätze.

$datensatz = $erg->fetch_all();

Wir haben dadurch jetzt zwar alle Daten, allerdings haben wir kein assoziatives Array mehr:

alle Datensatz aus Datei auslesen
alle Datensatz aus Datei auslesen

Die Anweisung fetch_all(); kann mit Parameter erweitert werden – wird fetch_all(MYSQLI_ASSOC) genutzt, erhalten wir wieder unser assoziatives Array und alle Daten:

alle Datensatz aus Datei auslesen über ein assoziatives Array
alle Datensatz aus Datei auslesen über ein assoziatives Array

Exkursion Umlaute fehlen bei Datenbankausgabe

Aber vorab noch die Umlautgeschichte. In der letzten Beispielausgabe sehen wird in dem Screenshot anstelle des „ü“ bei dem Nachnamen „Müller“ eine Raute mit Fragezeichen. Hier fehlt nur die Anweisung, dass bei unserer Datenbank mit UTF-8 gearbeitet wird.

Daher wird die Datei „inc/db.php“ ergänzt durch:

$db->set_charset('utf8');
alle Datensatz aus Datei auslesen mit korrekter Zeichenkodierung in assoziatives Array
alle Datensatz aus Datei auslesen mit korrekter Zeichenkodierung in assoziatives Array

Alle Daten der Datenbank sauber ausgeben

Wir haben nun alle Datensätze über die Anweisung fetch_all(MYSQLI_ASSOC) in einem Array gespeichert. Diese Daten können wir nun über eine foreach-Schleife ausgeben.

$datensatz = $erg->fetch_all(MYSQLI_ASSOC);
foreach($datensatz as $zeile) {
    echo '<br>';
    echo '<br>' . $zeile['vorname'];
}

Oder weitere Daten ausgeben über die Punkt-Anweisung verkettet:

foreach($datensatz as $zeile) {
    echo '<br>';
    echo '<br>' . $zeile['vorname'] .' '. $zeile['nachname'] ;
}

Warum also nicht immer einfach fetch_all() nutzen? Je größer der Datenbestand ist und je öfters die Datenbank abgefragt (sprich Anzahl der Nutzer pro Sekunde), desto heftiger wird der Speicherverbrauch und irgendwann geht der beste Server in die Knie. Daher wird gerne fetch_assoc() und für die vollständige Ausgabe eine while-Schleife genutzt.

Also machen wir aus unsere foreach-Schleife eine while-Schleife und machen direkt die Zuweisung zu $zeile

<?php
require 'inc/db.php';
echo "<h1>Programm Adressbuch</h1>";
$erg = $db->query("SELECT id, vorname, nachname FROM kontakte")
    or die( $db->error);
print_r($erg);
if ($erg->num_rows) {
    echo "<p>Daten vorhanden: Anzahl ";
    echo $erg->num_rows;
}
while ($zeile = $erg->fetch_assoc()) {
    echo '<br>' . $zeile['vorname'] .' '. $zeile['nachname'] ;
}
?>

Und jetzt nutzen wir die objektorientierte Schreibweise – somit bekommen wir es noch übersichtlicher!

<?php
require 'inc/db.php';
echo "<h1>Programm Adressbuch</h1>";
$erg = $db->query("SELECT id, vorname, nachname FROM kontakte")
    or die( $db->error);
print_r($erg);
if ($erg->num_rows) {
    echo "<p>Daten vorhanden: Anzahl ";
    echo $erg->num_rows;
}
// while ($zeile = $erg->fetch_assoc()) {
while ($zeile = $erg->fetch_object()) {
    echo '<br>'. $zeile->vorname;
}
?>

Jetzt haben wir keinerlei Array mehr, sondern müssen auch hier die objektorientierte Schreibweise nutzen.

Anstelle von $zeile['vorname'] wird es dann $zeile->vorname

Als Ausgabe im Browser ändert sich nichts – es werden weiterhin alle Namen angezeigt. Unser Quellcode ist übersichtlicher geworden!

Und nun räumen wir noch hinter uns auf. Der Speicherplatz kann nach der Ausgabe wieder freigegeben werden. Wir wollen ja nichts weiter bisher mit unserer Datenbankabfrage machen.

$erg->free();
$db->close();

Wenn Sie einen Fehler finden, bitte mitteilen (egal ob Schreibfehler oder inhaltlicher Fehler).

Mit Maus fehlerhafte Stelle markieren und übernehmen mit folgendem Button:



(kann angegeben werden)

Nach Absenden kommt hier Feedback! Bitte nicht doppelt absenden. Danke.

Bitte unterstützen Sie dieses Projekt

Sie können dieses Projekt in verschiedenen Formen unterstützen - wir würden uns freuen und es würde uns für weitere Inhalte motivieren :).

unsere Videos bestellen

Unsere Videos und eBooks bestellen.

Spenden

Sie können uns eine Spende über PayPal zukommen lassen.

Weiterempfehlungen

Empfehlen Sie es weiter - wir freuen uns immer über Links und Facebook-Empfehlungen.

Bücher über Amazon

Bestellen Sie Bücher über folgende Links bei Amazon:

Fehler melden

Vielen Dank für Ihre Hilfe