$stmt->free_result()
giải phóng bộ nhớ liên quan đến tập kết quả, trong khi $stmt->close()
giải phóng bộ nhớ liên quan đến một câu lệnh đã chuẩn bị. Sau đó gọi $stmt->close()
sẽ hủy bỏ bất kỳ kết quả nào vẫn còn.
Về bản chất, gọi $stmt->close()
sẽ cung cấp hiệu ứng tương tự như gọi $stmt->free_result()
vì nó cũng hủy tập hợp kết quả. Nhưng đang gọi $stmt->free_result()
sẽ không xóa bộ nhớ được sử dụng bởi câu lệnh đã chuẩn bị trong trường hợp đó bạn phải sử dụng $stmt->close()
.
Tùy thuộc vào việc sử dụng cái nào - có thể có những trường hợp bạn định sử dụng câu lệnh chuẩn bị mà bạn đã khởi tạo, nhưng không còn cần đến bộ kết quả mà bạn hiện có. Trong trường hợp như vậy, bạn sẽ đợi khi gọi $stmt->close()
cho đến khi bạn hoàn thành câu lệnh đã chuẩn bị và thay vào đó hãy gọi $stmt->free_result()
trước khi thực hiện một câu lệnh khác.