statements statement sentencias prepared preparadas bind_param array php mysql mysqli prepared-statement

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



select where mysql php (2)

PHP finalizará su conexión y liberará el recurso una vez que termine de ejecutarse;

mysqli::close Cierra una declaración preparada.

Dado que la cantidad total de conexiones disponibles es limitada, es una buena práctica liberar el recurso en cuanto termine con él.

Y

mysqli_stmt::free_result Libera la memoria de resultados almacenada para el identificador de la declaración dada.

es una buena práctica liberar explícitamente el recurso cuando ya no los necesite. puede evitar una carga pesada en el servidor cuando se realizan muchas solicitudes al mismo tiempo.

Ambos no son nunca estrictamente necesarios para invocar, y es una buena práctica el uso de ambos.

Estoy tratando de aclarar la diferencia entre $ stmt-> close () y $ stmt-> free_result () cuando finalizo una declaración mysqli preparada.

Hasta ahora yo uso:

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

y todo parece funcionar bien.

Pero he visto a muchos programadores usar $ stmt-> close en lugar de $ stmt-> free_result (). Y una vez los he visto a ambos:

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

Entonces, ¿qué debo elegir, en qué circunstancias y por qué?


$stmt->free_result() libera memoria relacionada con un conjunto de resultados, mientras que $stmt->close() libera memoria relacionada con una declaración preparada. Posteriormente, al llamar a $stmt->close() se cancelará el resultado restante.

En esencia, llamar a $stmt->close() proporcionará el mismo efecto que llamar a $stmt->free_result() ya que también cancela el conjunto de resultados. Pero llamar a $stmt->free_result() no borrará la memoria utilizada por la declaración preparada, en cuyo caso debe usar $stmt->close() .

En lo que respecta a cuál usar, puede haber situaciones en las que pretenda utilizar la declaración preparada que haya inicializado, pero que ya no necesite el conjunto de resultados que tiene actualmente. En tal caso, esperaría al llamar a $stmt->close() hasta que haya terminado con la declaración preparada y en su lugar llame a $stmt->free_result() antes de ejecutar otra declaración.