Ich muss zugeben, mysqli_query()
Die manuelle Eingabe enthält kein sauberes Beispiel zum Abrufen mehrerer Zeilen. Vielleicht liegt es daran, dass die Routine so routinemäßig ist und den PHP-Leuten seit Jahrzehnten bekannt ist:
$result = $link->query("DESCRIBE students");
while ($row = $result->fetch_assoc()) {
// to print all columns automatically:
foreach ($row as $value) {
echo "<td>$value</td>";
// OR to print each column separately:
echo "<td>",$row['Field'],"</td><td>",$row['Type'],"</td>\n";
}
}
Falls Sie die Spaltentitel drucken möchten, müssen Sie Ihre Daten zuerst in einem verschachtelten Array auswählen und dann die Schlüssel der ersten Zeile verwenden:
// getting all the rows from the query
// note that handy feature of OOP syntax
$data = $link->query("DESC students")->fetch_all(MYSQLI_ASSOC);
// getting keys from the first row
$header = array_keys(reset($data));
// printing them
foreach ($header as $value) {
echo "<td>$value</td>";
}
// finally printing the data
foreach ($data as $row) {
foreach ($row as $value) {
echo "<td>$value</td>";
}
}
Einige Hosts haben möglicherweise keine Unterstützung für fetch_all()
Funktion. Füllen Sie in einem solchen Fall die $data
aus Array auf die übliche Weise:
$data = [];
$result = $link->query("DESC students");
while ($row = $result->fetch_assoc())
{
$data[] = $row;
}
Zwei wichtige Anmerkungen muss ich hinzufügen.
-
Sie müssen mysqli so konfigurieren, dass Fehler automatisch ausgegeben werden, anstatt sie für jede mysqli-Anweisung manuell zu überprüfen. Fügen Sie dazu diese Zeile vorher ein
mysqli_connect()
:mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
-
Der wichtigste Hinweis: im Gegensatz zu
mysql_query()
,mysqli_query()
hat eine sehr begrenzte Verwendung. Sie können diese Funktion nur verwenden, wenn keine Variablen in der Abfrage verwendet werden. Wenn eine PHP-Variable verwendet werden soll, sollten Sie niemalsmysqli_query()
verwenden , aber halten Sie sich immer an vorbereitete Aussagen , etwa so:$stmt = $mysqli->prepare("SELECT * FROM students WHERE class=?"); $stmt->bind_param('i', $class); $stmt->execute(); $data = $stmt->get_result()->fetch_all();
Es ist ein bisschen wortreich, muss ich zugeben. Um die Menge an Code zu reduzieren, können Sie entweder PDO verwenden oder eine einfache Hilfsfunktion verwenden um alle Vorbereitungen/Bindungen/Ausführungen darin zu erledigen:
$sql = "SELECT * FROM students WHERE class=?";
$data = prepared_select($mysqli, $sql, [$class])->fetch_all();