2010-07-29 12 views
20

¿Realmente necesito hacer mysql_close()? ¿Por qué o por qué no?¿Realmente necesito hacer mysql_close()

¿Hay un disparador que cierra el enlace después de mysql_connect incluso si no lo hago mysql_close?

+0

Posible duplicado de [¿Es importante cerrar la conexión mysql?] (Http://stackoverflow.com/questions/880885/is-closing-the-mysql-connection-important) – NewUser

Respuesta

6

En la mayoría de los casos, llamar mysql_close no hará ninguna diferencia, en cuanto al rendimiento. Pero siempre es una buena práctica cerrar los recursos (manejadores de archivos, sockets abiertos, conexiones de bases de datos, etc.) que su programa ya no usa.

Esto es especialmente cierto si está haciendo algo que puede tardar unos segundos, por ejemplo, leer y analizar datos de una API REST. Debido a que la llamada de la API pasa por la línea, las condiciones negativas de la red pueden hacer que la secuencia de comandos se bloquee durante varios segundos. En este caso, el momento apropiado para abrir la conexión de la base de datos es después de la llamada REST se completa y se analiza.

Para resumir mi respuesta, las dos reglas importantes son:

  1. se destinen sólo los recursos (identificadores de archivo, enchufes, conexiones de bases de datos, etc.) cuando el programa está listo para usarlos.
  2. Libere recursos inmediatamente después de que su programa haya terminado con ellos.
10

Según the documentation:

Usando mysql_close() generalmente no es necesario, como no persistentes enlaces abiertos se cierran automáticamente al final de la ejecución del script.

Personalmente, siempre me gusta para asegurarse de que cualquier cosa que pedante cerca abro, pero no es requerido .

+1

cuál es el beneficio de cerrar el enlace ? – denniss

+0

No hay ningún beneficio para cerrar el enlace usted mismo. – Charles

+2

@Charles Si su script tardará un poco en terminar una vez que haya terminado de utilizar MySQL, entonces puede ser beneficioso liberar una conexión que otras secuencias de comandos podrían querer usar. – penguin359

3

El manual says:

Usando mysql_close() generalmente no es necesario, como no persistentes enlaces abiertos se cierran automáticamente al final de la ejecución del script.

Así que no, en realidad no. Sin embargo, es útil liberar recursos antes de intentar una operación que potencialmente consume grandes cantidades de recursos, pero probablemente no supondrá una gran diferencia.

3

¿cuál es el beneficio de cerrar el enlace?

Normalmente, no es beneficioso cerrar el enlace usted mismo, ya que se cerrará automáticamente.

sólo puedo pensar en un par de beneficios

  • Si el script tiene una gran cantidad de procesamiento que hacer después de que haya terminado de usar la base de datos, cerrando el enlace de la base de datos antes de tiempo puede ayudar a liberar un poco de memoria y otros recursos (como las conexiones de MySQL) mientras el script continúa con otras cosas.Es poco probable que esto sea un problema en la mayoría de los scripts, ya que la mayoría de los scripts terminarán bastante rápido después de que haya terminado con la conexión de la base de datos, y el tiempo que la conexión permanecerá abierta antes de que el script PHP termine será relativamente corto.

  • Integridad y limpieza del código. Puede darle una buena sensación, y generalmente es una buena seguridad de código para cerrar lo que ha abierto, aunque en este caso no es técnicamente necesario.

+4

Si está limitando el número de conexiones a su base de datos, el uso de mysql_close() libera una de esas conexiones permitiendo que otras secuencias de comandos accedan a –

6

cuál es el beneficio de cerrar el enlace?

La ventaja es que puede liberar la conexión a la base de datos, y los recursos correspondientes en el servidor de la base de datos, antes de que la limpieza de solicitud de PHP lo hiciera.

Digamos, por ejemplo, que consulta todos los datos que su solicitud necesitará en los primeros 20 milisegundos de la solicitud. Pero luego su código PHP gasta otros 80 milisegundos corriendo el código y formateando los resultados. Lo que significa que el 80% del tiempo, la aplicación mantiene abierta una conexión db sin necesidad de hacerlo, y en promedio, 8 de cada 10 subprocesos de conexión en el servidor db están inactivos y usan recursos.

+0

gracias por esta respuesta. nunca pensé en eso, pero tu simple matemática demuestra la gran ventaja de cerrar esas conexiones (al menos para hacerlo una práctica estándar porque nunca se sabe si podrías introducir un código que podría necesitar ejecutarse por un tiempo después de que hayas terminado con la base de datos) . – tyrex

Cuestiones relacionadas