Hauptmenü

Untermenü

MySQLi - Methoden - MySQLi_STMT - Daten holen

1. Die einfache Variante

... läuft über die Methode get_result. Dazu benötigt man zuerst den üblichen Code, also zum Beispiel den hier. Die prozedurale Vorgehensweise könnt ihr einfach vorstellen, das hab ich euch ja nun zig Mal vorgekaut.


$mysqli = new mysqli('host''user''pw''db');
$query  'SELECT bla FROM blubb WHERE id > ?';
$stmt   $mysqli->prepare($query);
$id     0;
$stmt  -> bind_param('i'$id); 
$stmt  -> execute(); 

Und jetzt ganz wichtig

Um nun auf die Datensätze zugreifen zu können, wechselt man von der MySQLi_STMT- zur MySQLi_Result-Klasse. Zuerst benötigt man eine Referenz auf die MySQLi_STMT-Klasse und der Methode get_result,


// Objektorientiert
$result $stmt -> get_result();

// Prozedural
$result mysqli_stmt_get_result($stmt);

um sich dann das Ergebnis mittels irgendeiner fetch_irgendwas-Methode der MySQLi_Result-Klasse zu holen.


// Objektorientiert
while ($row $result -> fetch_assoc())
{
  print_r($row);
}

// Prozedural
while ($row mysqli_fetch_assoc($result))
{
  print_r($row);
}

2. Die komplizierte Variante

Hier wird das Ergebnis eines Prepared Statements zwischengespeichert. Was das soll, weiß ich derzeit auch nicht so ganz genau, denn die Art der Umsetzung wirkt auf mich ein wenig krude.


// Objektorientiert
$id    10,
$query 'SELECT bla, blubb FROM blubber WHERE id > ?';
$stmt  $mysqli -> prepare($query);
$stmt -> bind_param('i'$id);
$stmt -> execute();
$stmt -> bind_result($bla$blubb);

// Prozedural
...
mysqli_stmt_bind_result($stmt$bla$blubb);

Wichtig ist dabei die Anzahl der Felder, die zurückgegeben werden. Denn für jedes muss es eine entsprechende Variable geben. Wie Letztere heißen, ist dabei völlig egal, Hauptsache die Anzahl stimmt. Die Daten selber holt man sich nun mit der Methode fetch.


// Objektorientiert
while ($stmt->fetch()) {
  echo $bla.'-'.$blubb;
}

// Prozedural
while (mysqli_stmt_fetch($stmt)) {
  echo $bla.'-'.$blubb;
}

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