2008-09-19 16 views
6

Al comienzo de cada página PHP, abro la conexión a MySQL, la utilizo en toda la página y la cierro al final de la página. Sin embargo, con frecuencia redirijo a la mitad de la página a otra página y, por lo tanto, en esos casos, la conexión no se cierra. Entiendo que esto no está mal para el rendimiento del servidor web ya que PHP cierra automáticamente todas las conexiones de MySQL al final de cada página de todos modos. ¿Hay algún otro problema aquí para tener en cuenta, o es realmente cierto que no tiene que preocuparse por cerrar las conexiones de su base de datos en PHP?¿Qué sucede si las conexiones de MySQL no están cerradas continuamente en las páginas de PHP?

$mysqli = new mysqli("localhost", "root", "", "test"); 
...do stuff, perhaps redirect to another page... 
$mysqli->close(); 

Respuesta

17

De:. http://us3.php.net/manual/en/mysqli.close.php

"conexiones abiertas (y recursos similares) son destruidos automáticamente al final de la ejecución del script Sin embargo, aún debe cerrar o libre de todas las conexiones, los conjuntos de resultados y los identificadores de instrucción tan pronto como ya no sean necesarios. Esto ayudará a devolver recursos a PHP y MySQL más rápido ".

+0

¿Cuánto más rápido? ¿Se vuelve continuamente más lento a medida que avanza? – Pachonk

2

Puede haber un límite de cuántas conexiones se pueden abrir a la vez, por lo que si tiene muchos usuarios puede que se quede sin conexiones de SQL. En efecto, los usuarios verán errores de SQL en lugar de buenas páginas web.

Es mejor abrir una conexión para leer datos, luego cerrarla, luego mostrar datos y una vez que el usuario haga clic en "enviar", abra otra conexión y luego envíe todos los cambios.

+0

"En efecto, los usuarios verán errores de SQL en lugar de buenas páginas web". - Espero que display_errors = 0 ;! – Ross

3

El hecho de que redirija no significa que la secuencia de comandos deja de ejecutarse. Una redirección es solo un encabezado que se envía. Si no sale() inmediatamente después, el resto de su script continuará ejecutándose. Cuando la secuencia de comandos termine de ejecutarse, cerrará todas las conexiones abiertas (o las liberará de nuevo al grupo si está utilizando conexiones persistentes). No te preocupes por eso

Cuestiones relacionadas