| Einführung in die MySQLi-Erweiterung von PHP 5 - Datensätze auslesen |
Seite 4 von 7
Datensätze auslesen (Query Methode)Beim auslesen von Datensätze hat sich nicht viel geändert; zumindest nicht, wenn man den gewohnten Weg geht. Hier das Script mit dem wir unsere Mod-Liste auslesen können.
<?php // Neues Datenbank-Objekt erzeugen $db = @new mysqli( 'localhost', 'root', '', 'tutorials' ); // Pruefen ob die Datenbankverbindung hergestellt werden konnte if (mysqli_connect_errno() == 0) { // Query vorbereiten und an die DB schicken $sql = 'SELECT `name`, `bereich` FROM `moderatoren`'; $ergebnis = $db->query( $sql ); // Anzahl gefunde Datensaetze ausgeben echo "<p>Es wurden " .$ergebnis->num_rows. " Einträge gefunden.</p>"; // Ergebnisse ausgeben while ($zeile = $ergebnis->fetch_object()) { echo $zeile->name. " ist zuständig für " .$zeile->bereich. "<br />"; } // Resourcen freigeben $ergebnis->close(); } else { // Es konnte keine Datenbankverbindung aufgebaut werden echo 'Die Datenbank konnte nicht erreicht werden. Folgender Fehler trat auf: <span class="hinweis">' .mysqli_connect_errno(). ' : ' .mysqli_connect_error(). '</span>'; } // Datenbankverbindung schliessen $db->close(); ?> Zuerst wird unsere Statement formuliert, das wir in $sql ablegen. In der Zeile ... $ergebnis = $db->query( $sql ); ... senden wir die Anfrage (Query) mit dem Statement ($sql) an die Datenbank und erhalten ein Ergebnis zurück das wir in $ergebnis ablegen, das dadurch zu einem Objekt wird. In der nächsten Zeile geben wir aus wie viele Datensätze gefunden wurden. Die Anzahl steckt, wie oben erwähnt, in der Eigenschaft num_rows unseres $ergebnis Objekts. Die eigentlichen Datensätze werden in der while-Schleife ausgegeben. Dadurch das wir die Treffer-Zeilen als Objekt fetchen, erhalten wir Zugriff auf die Felder in Form von Objekt Eigenschaften. Selbstverständlich könnten wir das Ergebnis auch mit $ergebnis->fetch_array() ausgeben. In dem Fall würden wir auf die Zeilen als Array zugreifen: $zeile['name'] und $zeile['bereich'] Jetzt schauen wir uns einen alternativen MySQLi Weg an, wie wir an die Ergebnisse kommen können. Datensätze auslesen (Prepare Methode)Neu in MySQLi ist, dass man Anweisungen an die Datenbank vorbereiten kann. Dadurch teilt man der DB mit welche Daten gesendet werden und wie damit zu verfahren ist. Es wird also nicht direkt eine Query an die DB geschickt, sondern erst eine Art Vorbote mit Informationen über die eigentliche Anweisung. Die Anweisung kann man zu einem beliebigen Zeitpunkt, beliebig oft an die DB senden. <?php // Neues Datenbank-Objekt erzeugen $db = @new mysqli( 'localhost', 'root', '', 'tutorials' ); // Pruefen ob die Datenbankverbindung hergestellt werden konnte if (mysqli_connect_errno() == 0) { $sql = 'SELECT `name`, `bereich` FROM `moderatoren` ORDER BY `name`'; // Statement vorbereiten $ergebnis = $db->prepare( $sql ); // an die DB schicken $ergebnis->execute(); // Ergebnis an Variablen binden $ergebnis->bind_result( $name, $bereich ); // Ergebnisse ausgeben while ($ergebnis->fetch()) { echo $name. " ist zuständig für " .$bereich. "<br />"; } } else { // Es konnte keine Datenbankverbindung aufgebaut werden echo 'Die Datenbank konnte nicht erreicht werden. Folgender Fehler trat auf: <span class="hinweis">' .mysqli_connect_errno(). ' : ' .mysqli_connect_error(). '</span>'; } // Datenbankverbindung schliessen $db->close(); ?> Das Zusammenstellen der Abfrage ist identisch zum vorherigen Beispiel. Diesmal wird $sql allerdings nicht direkt per $ergebnis = $db->query( $sql ); an die DB gesendet, sondern wir teilen der DB mit einem ... $ergebnis = $db->prepare( $sql ); ... mit was wir von der Abfrage erwarten. Wir bereiten (prepare) also die eigentliche Anweisung vor. Ausgeführt wird die Anweisung dann mit ... $ergebnis->execute(); Dieses execute() kann man unendlich oft an die DB senden und es wird immer die zuletzt festgelegte Anweisung ausgeführt. Das hört sich momentan nach "na und?" an, ist aber beim befüllen der DB von großem Vorteil, wie wir weiter unten noch sehen werden. Das Abfrageergebnis steht jetzt zur Verfügung. Statt es direkt in einer Schleife auszugeben, binden wir die Felder der einzelnen Zeilen unseres Ergebnis an selbst definierte Variablen. $ergebnis->bind_result( $name, $bereich ); Die Anzahl der Parameter (Variablen) muß identisch mit der Anzahl der Felder unserer Abfrage sein. Ausgegeben wird das Ergebnis dann in einer while-Schleife ... while ($ergebnis->fetch()) { echo $name. " ist zuständig für " .$bereich. "<br />"; } ... bei der mittels $ergebnis->fetch() Zeile für Zeile auf unser Ergebnis zugegriffen wird. Die Variablen $name und $bereich werden bei jedem Durchlauf mit den neuen Werten gefüllt. Man kann aber nicht nur Abfrageergebnisse an Variablen binden, sondern auch Variablen an Anweisungen. Das, zusammen mit der Fähigkeit Anweisungen vorzubereiten, ermöglicht es uns sehr komfortabel und sicher Daten in die DB zu schreiben. |