Intereting Posts
Есть что-то вроде Acegi для PHP? Ошибка PHP error_reporting (0) влияет на регистрацию ошибок или просто отображается? Запись идентификатора в базу данных и чтение пользователя WordPress с его идентификатором composer.lock: как это работает? проблема с содержимым потока проверить, не вызвал ли запрос пустую строку mysqli Автоматическое создание настраиваемых значений полей в WordPress Как я могу изменить текст легенды в c3 круговой диаграмме Как я могу запретить пользователям доступ к частям моего приложения Backbone, если они не вошли в систему? HTML-формы. Как добавить несколько кнопок, которые передают разные значения? Как получить поисковый запрос реферера из Google? Размер файла не будет отображаться на скрипте загрузки PHP во время загрузки файла Удаление повторяющихся строк из таблицы MySql Как запустить php-скрипт внутри html-файла? Ошибка – session_destroy () – попытка уничтожить неинициализированную сессию

$ stmt-> close () vs $ stmt-> free_result ()

Я пытаюсь уточнить разницу между $ stmt-> close () и $ stmt-> free_result () при завершении подготовленного оператора mysqli .


До сих пор я использую:

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

и все работает нормально.

Но я видел, что многие программисты используют $ stmt-> close вместо $ stmt-> free_result (). И как только я увидел их обоих:

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

Итак, что мне выбрать, при каких обстоятельствах и почему?

$stmt->free_result() освобождает память, связанную с результирующим набором, тогда как $stmt->close() освобождает память, связанную с подготовленным оператором. Впоследствии вызов $stmt->close() отменяет любой оставшийся результат.

По сути, вызов $stmt->close() обеспечит тот же эффект, что и вызов $stmt->free_result() поскольку он также отменяет набор результатов. Но вызов $stmt->free_result() не очистит память, используемую подготовленным оператором, и в этом случае вы должны использовать $stmt->close() .

Насколько подходит для использования – могут быть ситуации, когда вы намереваетесь использовать подготовленный оператор, который вы инициализировали, но больше не нуждаетесь в наборе результатов, который у вас есть. В таком случае вы будете ждать при вызове $stmt->close() пока не закончите с подготовленным оператором, и вместо этого вызовите $stmt->free_result() перед выполнением другого оператора.

PHP закончит ваше соединение и освободит ресурс после его завершения;

mysqli :: close Закрывает подготовленное утверждение.

Поскольку количество доступных доступных подключений ограничено, освобождение ресурса, которое вы сделали с ним, является хорошей практикой.

А также

mysqli_stmt :: free_result Frees хранит память результатов для данного дескриптора дескриптора.

это хорошая практика, чтобы бесплатно освободить ресурс, когда вы им больше не нужны. это может привести к большой нагрузке на сервер, когда многие запросы выполняются одновременно.

Оба никогда не требуют строгого обращения, и это хорошая практика использования обоих.