Muszę przyznać, mysqli_query()
ręczne wprowadzanie nie zawiera czystego przykładu pobierania wielu wierszy. Być może dzieje się tak dlatego, że rutyna jest tak rutynowa, znana ludziom PHP od dziesięcioleci:
$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";
}
}
Jeśli chcesz wydrukować tytuły kolumn, musisz najpierw wybrać dane do zagnieżdżonej tablicy, a następnie użyć klawiszy pierwszego wiersza:
// 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>";
}
}
Niektóre hosty mogą nie obsługiwać funkcji fetch_all()
funkcjonować. W takim przypadku wypełnij $data
tablica w zwykły sposób:
$data = [];
$result = $link->query("DESC students");
while ($row = $result->fetch_assoc())
{
$data[] = $row;
}
Dwie ważne uwagi, które muszę dodać.
-
Musisz skonfigurować mysqli, aby automatycznie zgłaszał błędy, zamiast sprawdzać je ręcznie dla każdej instrukcji mysqli. Aby to zrobić, dodaj ten wiersz przed
mysqli_connect()
:mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
-
Najważniejsza uwaga: w przeciwieństwie do
mysql_query()
,mysqli_query()
ma bardzo ograniczone zastosowanie. Możesz użyć tej funkcji tylko jeśli w zapytaniu nie będą używane żadne zmienne. Jeśli jakakolwiek zmienna PHP ma być użyta, nigdy nie powinieneś używaćmysqli_query()
, ale zawsze trzymaj się przygotowanych instrukcji , tak:$stmt = $mysqli->prepare("SELECT * FROM students WHERE class=?"); $stmt->bind_param('i', $class); $stmt->execute(); $data = $stmt->get_result()->fetch_all();
Muszę przyznać, że to trochę przegadane. Aby zmniejszyć ilość kodu, możesz użyć PDO lub zastosować prostą funkcję pomocniczą aby wykonać wszystkie czynności związane z przygotowaniem / wiązaniem / wykonaniem w środku:
$sql = "SELECT * FROM students WHERE class=?";
$data = prepared_select($mysqli, $sql, [$class])->fetch_all();