Когда я присваиваю результаты
второй запрос к $results
, что происходит
в память, связанную с
предыдущие результаты?
Когда вы выполните это:
$results = $db->query($query);
Если раньше что-то было в $results
, к этому старому контенту больше нельзя получить доступ, так как на него не осталось никаких ссылок.
В таком случае PHP пометит старое содержимое переменной как «, больше не нужное » - и будет удалено из памяти, когда PHP потребуется немного памяти.
Это, по крайней мере, верно для общих переменных PHP; однако в случае результатов запроса SQL некоторые данные могут храниться в памяти на уровне драйвера - над которым PHP не имеет большого контроля.
Должен ли я освободить этот результат раньше
назначить новый?
Я никогда этого не делаю, но цитирую страницу руководства mysqli_result::free
:
Примечание: вы всегда должны освобождать
результат с mysqli_free_result (), когда
ваш объект результата не нужен
больше
Вероятно, это не имеет значения для небольшого скрипта ... И единственный способ убедиться в этом - это проверить, используя memory_get_usage
до и после вызова этого метода, чтобы увидеть, есть ли разница или нет.
Относится к 1, когда я убираюсь в
конец, убирает только последний
достаточно результатов?
Когда сценарии заканчиваются:
- Соединение с базой данных будет закрыто - это означает, что любая память, которая может использоваться драйвером, должна быть освобождена
- Все переменные, используемые сценарием PHP, будут уничтожены - это означает, что память, которую они использовали, должна быть освобождена.
Итак, в конце скрипта, вероятно, действительно нет необходимости освобождать набор результатов.
Когда я пытаюсь убрать результат,
Должен ли я освободить его, как указано выше,
я должен закрыть это, или оба?
Если вы закроете соединение с базой данных (используя mysqli::close
, как вы предложили) , это отключит вас от базы данных.
Это означает, что вам придется повторно подключиться, если вы хотите сделать еще один запрос! Что совсем не хорошо (требует времени, ресурсов, ...)
Вообще говоря, я не закрывал бы соединение с базой данных, пока я действительно не уверен, что он мне больше не понадобится - это означает, что я не отключился бы до конца сценария.
А так как « конец скрипта » означает «, соединение будет закрыто », даже если вы его не указали; Я почти никогда не закрываю соединение самостоятельно.