Harus saya akui, mysqli_query()
entri manual tidak berisi contoh bersih tentang cara mengambil banyak baris. Mungkin karena rutinitasnya yang begitu rutin, yang dikenal oleh orang-orang PHP selama beberapa dekade:
$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";
}
}
Jika Anda ingin mencetak judul kolom, Anda harus memilih data Anda ke dalam array bersarang terlebih dahulu dan kemudian menggunakan kunci dari baris pertama:
// 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>";
}
}
Beberapa host mungkin tidak memiliki dukungan untuk fetch_all()
fungsi. Dalam kasus seperti itu, isi $data
susun dengan cara biasa:
$data = [];
$result = $link->query("DESC students");
while ($row = $result->fetch_assoc())
{
$data[] = $row;
}
Dua catatan penting yang harus saya tambahkan.
-
Anda harus mengonfigurasi mysqli untuk membuang kesalahan secara otomatis alih-alih memeriksanya untuk setiap pernyataan mysqli secara manual. Untuk melakukannya, tambahkan baris ini sebelum
mysqli_connect()
:mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
-
Catatan terpenting: tidak seperti
mysql_query()
,mysqli_query()
memiliki kegunaan yang sangat terbatas. Anda dapat menggunakan fungsi ini hanya jika tidak ada variabel yang akan digunakan dalam kueri. Jika ada variabel PHP yang akan digunakan, Anda tidak boleh menggunakanmysqli_query()
, tetapi selalu berpegang pada pernyataan yang disiapkan , seperti ini:$stmt = $mysqli->prepare("SELECT * FROM students WHERE class=?"); $stmt->bind_param('i', $class); $stmt->execute(); $data = $stmt->get_result()->fetch_all();
Agak bertele-tele, harus saya akui. Untuk mengurangi jumlah kode, Anda dapat menggunakan PDO atau mengadopsi fungsi pembantu sederhana untuk melakukan semua persiapan/pengikatan/eksekusi bisnis di dalam:
$sql = "SELECT * FROM students WHERE class=?";
$data = prepared_select($mysqli, $sql, [$class])->fetch_all();