2013-10-23 12 views
14

Tôi cố gắng để làm rõ sự khác biệt giữa $ stmt-> close()$ stmt-> free_result() khi hoàn thành một chuẩn bị mysqli tuyên bố.


Cho đến nay tôi sử dụng:

$mysqli = new mysqli(host,user,password,database); 
$stmt = $mysqli->prepare(sql statement); 
[...] 
$stmt->free_result(); 
$mysqli->close(); 

và mọi thứ dường như làm việc tốt.

Nhưng tôi đã thấy rất nhiều lập trình viên sử dụng $ stmt-> close thay vì $ stmt-> free_result(). Và một khi tôi đã nhìn thấy cả hai người trong số họ:

$stmt->free_result(); 
$stmt->close(); 
$mysqli->close(); 

Vì vậy, tôi nên chọn gì, trong hoàn cảnh nào và tại sao?

Trả lời

22

$stmt->free_result() giải phóng bộ nhớ liên quan đến tập hợp kết quả, trong khi $stmt->close() giải phóng bộ nhớ liên quan đến câu lệnh đã chuẩn bị. Sau đó, gọi $stmt->close() sẽ hủy mọi kết quả vẫn còn.

Về bản chất, gọi $stmt->close() sẽ cung cấp hiệu ứng giống như gọi số $stmt->free_result() vì nó cũng hủy kết quả. Nhưng 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().

Cho đến thời điểm bạn sử dụng - có thể có những tình huống mà 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 bộ kết quả bạn đang có. Trong trường hợp nà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 tuyên bố khác.

+0

giải thích lý tưởng! – neophyte

2

PHP sẽ kết thúc kết nối của bạn và giải phóng tài nguyên sau khi kết thúc chạy;

mysqli::closeĐóng báo cáo đã chuẩn bị.

Vì tổng số kết nối có sẵn bị giới hạn, giải phóng tài nguyên mà bạn đã thực hiện với nó là một phương pháp hay.

mysqli_stmt::free_resultgiải phóng được lưu trữ bộ nhớ kết quả cho xử lý tuyên bố nhất định.

thực tiễn tốt là giải phóng tài nguyên một cách rõ ràng khi bạn không cần chúng nữa. nó có thể tránh làm cho một tải nặng vào máy chủ khi nhiều yêu cầu được thực hiện cùng một lúc.

Cả hai không bao giờ thực sự cần thiết để gọi và thực hành tốt việc sử dụng cả hai.

Các vấn đề liên quan