$ 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();
Итак, что мне выбрать, при каких обстоятельствах и почему?
Ответы
Ответ 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 Свободно хранит память результатов для данного дескриптора дескриптора.
Хорошая практика - бесплатно освобождать ресурс, когда он вам больше не нужен. это может привести к большой нагрузке на сервер, когда многие запросы будут выполнены одновременно.
Оба никогда не требуют строгого вызова, и это хорошая практика использования обоих.