認めなければなりません、mysqli_query()
手動入力には、複数の行をフェッチする方法に関する明確な例が含まれていません。ルーチンが非常にルーチンであり、何十年もの間PHPの人々に知られているためかもしれません:
$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";
}
}
列のタイトルを印刷する場合は、最初にデータをネストされた配列に選択してから、最初の行のキーを使用する必要があります。
// 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>";
}
}
一部のホストは、fetch_all()
をサポートしていない場合があります 働き。このような場合は、$data
に入力してください 通常の方法で配列します:
$data = [];
$result = $link->query("DESC students");
while ($row = $result->fetch_assoc())
{
$data[] = $row;
}
追加する必要のある2つの重要な注意事項。
-
各mysqliステートメントを手動でチェックするのではなく、エラーを自動的にスローするようにmysqliを構成する必要があります。これを行うには、この行を前に追加します
mysqli_connect()
:mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
-
最も重要な注意事項:
mysql_query()
とは異なり 、mysqli_query()
使用は非常に限られています。この関数は、クエリで変数が使用されない場合にのみ使用できます。 PHP変数を使用する場合は、mysqli_query()
を使用しないでください。 、ただし常に プリペアドステートメント に固執します。 、このように:$stmt = $mysqli->prepare("SELECT * FROM students WHERE class=?"); $stmt->bind_param('i', $class); $stmt->execute(); $data = $stmt->get_result()->fetch_all();
それは少し言葉遣いです、私は認めなければなりません。コードの量を減らすには、PDOを使用するか、シンプルなヘルパー関数 を採用します。 内部ですべての準備/バインド/実行ビジネスを行うには:
$sql = "SELECT * FROM students WHERE class=?";
$data = prepared_select($mysqli, $sql, [$class])->fetch_all();