Tôi có một số câu hỏi về cách sử dụng MySQLi, truy vấn và quản lý bộ nhớ có liên quan. Đoạn mã ở đây là chỉ để làm rõ câu hỏi của tôi, vì vậy đừng đổ vào nó để kiểm tra lỗi, vv Tôi biết rằng cần phải làm :)Kết quả truy vấn MySQLi: Cách tiếp cận tốt nhất, bạn có đóng, miễn phí, cả hai?
Giả sử tôi có một cái gì đó như thế này:
@ $db = new mysqli($dbhost, $un, $ps, $dbname);
$query = "SELECT field1, field2 ".
"FROM table1 ".
"WHERE field1={$some_value}";
$results = $db->query($query);
while ($result = $results->fetch_object()) {
// Do something with the results
}
$query = "SELECT field1, field2 ".
"FROM table2 ".
"WHERE field1={$some_value2}";
// question 1
$results = $db->query($query);
while ($result = $results->fetch_object()) {
// Do something with the second set of results
}
// Tidy up, question 2
if ($results) {
$results->free();
}
if ($db) {
$db->close();
}
// Question 3, a general one
Vì vậy, dựa trên các ý kiến trong đoạn mã trên, sau đây là câu hỏi của tôi:
Khi tôi gán kết quả của truy vấn thứ hai để
$results
, những gì xảy ra với bộ nhớ gắn liền với kết quả trước đó? Tôi có nên giải phóng kết quả đó trước khi chỉ định kết quả mới không?Liên quan đến 1, khi tôi dọn dẹp ở cuối, chỉ làm sạch kết quả cuối cùng vừa đủ?
Khi tôi cố gắng làm sạch kết quả, tôi có nên giải phóng nó như trên không, tôi có nên đóng nó hay cả hai?
Tôi hỏi câu hỏi 3 vì tài liệu PHP cho mysqli::query
có một ví dụ sử dụng chặt chẽ, mặc dù gần không phải là một phần của mysqli_result
(xem ví dụ 1 trong mysqli::query). Và ngược lại, văn bản tham chiếu PHP thông thường của tôi sử dụng free
(Phát triển web PHP và MySQL, Ấn bản thứ tư, Welling và Thomson).
Bạn biết khoảnh khắc đó từ khi bạn làm việc trong một dự án và bạn quyết định kiểm tra Stackoverflow cho câu trả lời cho câu hỏi chỉ để thấy rằng bạn đã hỏi và đã trả lời câu hỏi đó vài năm trước ...? Ugh ... Tôi phải già đi :) Cảm ơn tất cả một lần nữa vì những câu trả lời tuyệt vời bên dưới. –