Hauptmenü

Untermenü

MySQLi - Methoden - MySQLi_Result

1. Die Datenerfassung

Wie der Name schon sagt (und ich auch), ist diese Klasse dafür zuständig, die Daten aus einer Anfrage zu holen. Also diese fetch_irgendwas-Sache. Dabei gibt es unterschiedliche Methoden, deren Wirkungsweise von der normalen MySQL-Erweiterung bekannt sein sollte. Ich selber zeige euch die Vorgehensweise anhand eines Beispiels.

fetch_assoc

Da ich bei der normalen MySQL-Erweiterung fast immer die namensähnliche Funktion genommen habe, greife ich auf die zurück. Zunächst mal das übliche Zeug.


// Objektorientiert
$mysqli = new mysqli('host', 'user', 'pw', 'db');
$query  = 'SELECT bla FROM blubb WHERE id > 20';
$result = $mysqli->query($query);

// Prozedural
$mysqli = mysqli_connect('host', 'user', 'pw', 'db');
$query  = 'SELECT bla FROM blubb WHERE id > 20';
$result = mysqli_query($mysqli, $query);

In der Variable $result befindet sich nun die Ressourcenkennung/Referenz auf die Abfrage. Und die benötigt man, um sich in einer Schleife die Daten zu holen. Und das war es auch schon.


// Objektorientiert
while ($row = $result->fetch_assoc()) {
  ...
}

// Prozedural
while ($row = mysqli_fetch_assoc($result)) {
  ...
}

Und das gibt es auch mit fetch_all, fetch_row, fetch_object und was weiß ich nicht alles.

2. Noch ein paar Methoden

data_seek

Damit kann man zu bestimmten Datensätzen springen. Ist in der einen oder anderen Situation sicher ganz hilfreich.


// Objektorientiert
$query  = 'SELECT bla FROM blubb WHERE id > 20';
$result = $mysqli -> query($query);
// Springt zum 10. Eintrag
$result -> data_seek(9);
$row_1  = $result -> fetch_assoc();
// Springt zum 20. Eintrag
$result -> data_seek(19);
$row_2  = $result -> fetch_assoc();

// Prozedural
...
mysqli_data_seek($result, 9);
$row_1  = mysqli_fetch_assoc($result);

free

Räumt das Ergebnis einer Abfrage aus dem Speicher.


// Objektorientiert
$query  = 'SELECT bla FROM blubb WHERE id > 20';
$result = $mysqli -> query($query);
...
$result -> close();

// Prozedural
$result = mysqli_query($query);
mysqli_free_result($result);

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt