Jeg må indrømme, mysqli_query()
manuel indtastning indeholder ikke et rent eksempel på, hvordan man henter flere rækker. Måske er det fordi rutinen er så rutinepræget, kendt af PHP-folk i årtier:
$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";
}
}
Hvis du vil udskrive kolonnetitlerne, skal du først vælge dine data i et indlejret array og derefter bruge nøglerne i den første række:
// 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>";
}
}
Nogle værter har muligvis ingen understøttelse af fetch_all()
fungere. I et sådant tilfælde skal du udfylde $data
array på den sædvanlige måde:
$data = [];
$result = $link->query("DESC students");
while ($row = $result->fetch_assoc())
{
$data[] = $row;
}
To vigtige bemærkninger, jeg skal tilføje.
-
Du skal konfigurere mysqli til at kaste fejl automatisk i stedet for at kontrollere dem manuelt for hver mysqli-sætning. For at gøre det skal du tilføje denne linje før
mysqli_connect()
:mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
-
Den vigtigste bemærkning: i modsætning til
mysql_query()
,mysqli_query()
har en meget begrænset anvendelse. Du må kun bruge denne funktion hvis ingen variabler skal bruges i forespørgslen. Hvis en PHP-variabel skal bruges, bør du aldrig brugemysqli_query()
, men hold dig altid til forberedte udsagn , sådan her:$stmt = $mysqli->prepare("SELECT * FROM students WHERE class=?"); $stmt->bind_param('i', $class); $stmt->execute(); $data = $stmt->get_result()->fetch_all();
Det er lidt ordrigt, må jeg indrømme. For at reducere mængden af kode kan du enten bruge PDO eller anvende en simpel hjælpefunktion at gøre alle forberedelser/binder/udfør forretninger indeni:
$sql = "SELECT * FROM students WHERE class=?";
$data = prepared_select($mysqli, $sql, [$class])->fetch_all();