Trong các câu lệnh PHP có nhiều lệnh nhìn qua có cảm giác chúng giống nhau hoàn toàn. Một trong số đó là mysqli_fetch_array và mysqli_fetch_assoc. Chúng đều có chức năng fetch dữ liệu từ câu query nhưng chắc chắn rằng sẽ có sự khác biệt.
Vậy sẽ khác nhau giữa mysqli_fetch_array và mysqli_fetch_assoc là gì?
‘fetch’ trong tiếng Anh nghĩa là “đi tìm” vậy với câu lệnh này bạn hiểu nôm na là đi tìm dữ liệu đưa vào mảng.
mysqli_fetch_array: trả về một mảng có cả khóa số và chuỗi kết hợp (tên cột) , vì vậy ở đây bạn có thể sử dụng $row[‘column_name’] hoặc $row[0]
Hướng dẫn tạo Form đăng ký thêm thành viên vào Database: https://quynhweb.pro/form-dang-ky-php/
Bạn sẽ chạy ví dụ bên dưới (Nếu trong cơ sở dữ liệu chưa có gì hãy đọc lại bài trên nhé!):
<?php $link = mysqli_connect('localhost', 'root', '', 'data') or die(mysql_error()); if ($link) { echo '<script language="javascript">alert("Kết nối thành công!");</script>'; } else { echo "Kết nối thất bại!"; } $sql = "SELECT * FROM member"; $result = mysqli_query($link, $sql) or die(mysql_error()); while ($row = mysqli_fetch_array($result)) { print $row[0]; print "n"; print $row[1]; print "n"; print $row[3]; print "n"; print $row[4]."<br/>"; } ?>
Khi chạy bạn sẽ nhận được kết quả như sau:
mysqli_fetch_assoc: sẽ trả về mảng khóa được lập chỉ mục chuỗi và không có mảng số, do đó bạn sẽ không có tùy chọn ở đây bằng cách sử dụng các phím số như thế nào $row[0]
Cũng ví dụ trên bạn thay mysqli_fetch_array bằng mysqli_fetch_assoc xem có gì thay đổi không nhé!
Và kết quả mình nhận được là xuất hiện lỗi.
Kết luận là mysqli_fetch_assoc không thể sử dụng $row[0] để xuất dữ liệu.
Tiếp theo anh em thay đoạn
while ($row = mysqli_fetch_assoc($result)) { print $row[0]; print "n"; print $row[1]; print "n"; print $row[3]; print "n"; print $row[4]."<br/>"; }
Bằng
while ($row = mysqli_fetch_assoc($result)) { print $row['id']; print "n"; print $row['username']; print "n"; print $row['email']; print "n"; print $row['phone']."<br/>"; }
Và kết quả là
Kết luận: mysqli_fetch_array dùng để xuất dữ liệu gồm các tên cột còn mysqli_fetch_assoc thì không làm được điều đó.
Qua bài viết này hi vọng bạn sẽ biết cách phân biệt giữa 2 cách fetch dữ liệu từ Database như thế nào rồi phải không nào.