Ding ding ding!
Khi kết nối với MySQL, PHP thích sử dụng truy vấn có đệm . Điều này đúng bất kể phương pháp bạn đang sử dụng để kết nối. Khi sử dụng truy vấn có bộ đệm, toàn bộ tập kết quả được tìm nạp ngay lập tức thay vì được tìm nạp khi bạn yêu cầu. Đây là thường tốt cho hiệu suất, vì có ít chuyến đi khứ hồi hơn.
Nhưng giống như mọi thứ trong PHP, có một gotcha. Như đã lưu ý trên trang đệm:
Bạn đang sử dụng PHP 5.3, có nghĩa là có nhiều khả năng bạn đang sử dụng mysqlnd.
Bạn sẽ muốn tắt các truy vấn có bộ đệm tại đây. Nó được thực hiện khác nhau trong mọi giao diện PHP với MySQL:
- Đối với PDO, bạn sẽ cần đặt
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
thuộc tínhfalse
. - Đối với mysqli, bạn cần chuyển
MYSQLI_USE_RESULT
đối vớiquery
phương pháp. - Đối với mysql, bạn cần gọi
mysql_unbuffered_query
thay vìmysql_query
.
Chi tiết và ví dụ đầy đủ có trên trang.
Đã nhận được truy vấn không có bộ đệm lớn!
Bạn phải đóng đúng cách xử lý câu lệnh và giải phóng tập hợp kết quả trước khi đưa ra một truy vấn khác:
- Trong PDO, điều này có nghĩa là gọi
closeCursor
trên bảng điều khiển câu lệnh. - Trong mysqli, điều này có nghĩa là gọi
free_result
trên xử lý câu lệnh hoặcfree
trên tay cầm kết quả, tùy thuộc vào những gì bạn đang làm việc với. - Trong mysql, điều này có nghĩa là gọi
mysql_free_result
Nếu không làm điều này sẽ dẫn đến lỗi.