PHP lỗi lấy dữ liệu từ MySQL trả về cho JavaScript

Xin giúp đỡ

Em có đoạn code PHP như sau:

<?php
include "db_conn.php"; // kết nối tới DB
$offset = @$_GET["offset"];
$query = "SELECT id, name, start_date FROM tbl_course LIMIT 10 OFFSET $offset";
$result = mysqli_query($conn, $query);
$data = mysqli_fetch_array($result);
mysqli_close($conn);
?>
<script type="text/javascript">
var courses = <?= json_encode($data); ?>
console.log(courses);
</script>

File db.conn.php để kết nối tới cơ sở dữ liệu:

<?php
$user = "root";
$pass = "abcd1234";
$db = "my_school";
$conn = @mysqli_connect("127.0.0.1", $user, $pass, $db);

if (!$conn) {
    exit;
}

?>

Bảng tbl_course trên DB có dữ liệu như sau:

mysql> select * from tbl_course;
+----+------+---------------------+
| id | name | start_date          |
+----+------+---------------------+
|  1 | AAA  | 2015-09-15 00:00:00 |
|  2 | BBB  | 2016-09-15 00:00:00 |
+----+------+---------------------+
2 rows in set (0,00 sec)

Nhưng khi em chạy thì biến courses trong Javascript không trả về toàn bộ thông tin DB. View source của trang trên trình duyệt thì thấy như sau:

<script type="text/javascript">
    var courses = "{"0":"1","id":"1","1":"AAA","name":"AAA","2":"2015-09-15 00:00:00","start_date":"2015-09-15 00:00:00"}";
    console.log(courses);
</script>

Mọi người chỉ giúp em đoạn code trên bị sai ở đâu vậy?

Many thanks!!!

Hói 3 tuần trước

Nếu dụng hàm mysql_featch_array() thì mỗi lần gọi PHP chỉ lấy (hay fetch) một record của bảng tương ứng trên database nên sẽ trả về kết quả là 1 record như bạn thấy. Thông thường hàm mysql_featch_array() được dùng với vòng lặp while():

while($row_data = mysqli_fetch_array($result)) {
...
}

Còn nếu như bạn muốn lấy ra toàn bộ record của bảng trong một câu lệnh duy nhất thì có thể dùng hàm mysqli_fetch_all():

$all_row_data = mysqli_fetch_all($result);

Tuy nhiên bạn lưu ý là cận thận trọng khi dùng mysqli_fetch_all() vì với những bảng có một số lượng lớn các dòng và mỗi dòng lại lưu trữ nhiều dữ liệu thì việc gọi hàm này sẽ có thể gây ra lỗi tràn bộ nhớ.

Trả lời 3 tuần trước

Viết Trả Lời: