Tôi phải thừa nhận rằng, mysqli_query()
mục nhập thủ công không chứa một ví dụ rõ ràng về cách tìm nạp nhiều hàng. Có thể là do thói quen này quá thường xuyên, được người dùng PHP biết đến trong nhiều thập kỷ:
$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";
}
}
Trong trường hợp bạn muốn in tiêu đề cột, trước tiên bạn phải chọn dữ liệu của mình vào một mảng lồng nhau và sau đó sử dụng các phím của hàng đầu tiê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>";
}
}
Một số máy chủ có thể không hỗ trợ fetch_all()
hàm số. Trong trường hợp như vậy, hãy điền vào $data
mảng theo cách thông thường:
$data = [];
$result = $link->query("DESC students");
while ($row = $result->fetch_assoc())
{
$data[] = $row;
}
Hai lưu ý quan trọng tôi phải bổ sung.
-
Bạn phải cấu hình mysqli để tự động ném lỗi thay vì kiểm tra chúng cho từng câu lệnh mysqli theo cách thủ công. Để làm như vậy, hãy thêm dòng này trước
mysqli_connect()
:mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
-
Lưu ý quan trọng nhất: không giống như
mysql_query()
,mysqli_query()
có một sử dụng rất hạn chế. Bạn chỉ có thể sử dụng hàm này nếu không có biến nào sẽ được sử dụng trong truy vấn. Nếu bất kỳ biến PHP nào sẽ được sử dụng, bạn không nên sử dụngmysqli_query()
, nhưng luôn tuân theo câu lệnh chuẩn bị sẵn , như thế này:$stmt = $mysqli->prepare("SELECT * FROM students WHERE class=?"); $stmt->bind_param('i', $class); $stmt->execute(); $data = $stmt->get_result()->fetch_all();
Nó hơi dài dòng, tôi phải thừa nhận. Để giảm số lượng mã, bạn có thể sử dụng PDO hoặc sử dụng chức năng trợ giúp đơn giản để thực hiện tất cả các công việc chuẩn bị / ràng buộc / thực hiện bên trong:
$sql = "SELECT * FROM students WHERE class=?";
$data = prepared_select($mysqli, $sql, [$class])->fetch_all();