Подтвердить что ты не робот

$ 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();

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

mysqli:: закрыть Закрывает подготовленный оператор.

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

и

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

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

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