У меня есть некоторые вопросы об использовании MySQLi, запросов и соответствующего управления памятью. Код здесь - только для того, чтобы прояснить мои вопросы, поэтому не дамтесь на него для проверки ошибок и т.д. Я знаю, что это нужно сделать:)
Предположим, что у меня есть что-то вроде этого:
@ $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
Итак, основываясь на комментариях в приведенном выше коде, вот мои вопросы:
-
Когда я присваиваю результаты второго запроса
$results
, что происходит с памятью, связанной с предыдущими результатами? Должен ли я освобождать этот результат перед назначением нового? -
Связано с 1, когда я очищаю в конце, достаточно очищает только последние результаты?
-
Когда я пытаюсь очистить результат, должен ли я освобождать его, как указано выше, должен ли я закрывать его или оба?
Я задаю вопрос 3, потому что документация PHP для mysqli::query
имеет пример, который использует close, даже если закрытие не является частью mysqli_result
(см. пример 1 в mysqli:: query). И наоборот, в моем обычном справочном тексте PHP используется free
(PHP и MySQL Web Development, Fourth Edition, Welling и Thomson).