2009-08-29 24 views
10

¿Hay alguna razón por la que deba cerrar la conexión después de una consulta o al final del script?¿Por qué usar mysqli_close()?

¿Cuáles son los beneficios de hacer/no hacer hacer?

+0

Si está hablando de scripts PHP, ¿le sugiero que agregue esa etiqueta a su pregunta? –

+0

Dupe: http://stackoverflow.com/questions/880885/close-mysql-connection-important y relacionado: http://stackoverflow.com/questions/336078/php-mysql-when-is-the-best-time -to-disconnect-from-the-database – karim79

Respuesta

20

La conexión (si no es persistente) siempre está cerrado al final del script, por lo que, en teoría, no es necesario cerrarlo usted mismo.

Aún así, si su script PHP tarda mucho tiempo en ejecutarse, es una buena idea cerrar la conexión cuando ya no tenga que hacer ninguna solicitud a la base de datos; al menos, si los cálculos largos están terminados después de las consultas.

Esto es especialmente cierto si su aplicación se implementa en un alojamiento compartido: su cuenta de usuario generalmente solo puede tener algunas conexiones abiertas al mismo tiempo. (Esa cantidad de conexiones simultáneas abiertas puede ser bastante pequeña en el alojamiento compartido, generalmente es más grande en servidores privados).


La razón por la que a menudo no es cerrar las conexiones ourselfves:

  • por lo general no se sabe muy bien cuando hemos hecho a todas nuestras preguntas - esto es especialmente cierto con las páginas que están hechos de muchos pequeños "bloques"; cada uno de ellos es independiente de los demás y puede hacer consultas por sí mismo; Entonces, ¿cuándo podemos cerrar la conexión?
  • las páginas web en general son bastante rápidas de generar, por lo que no nos molestamos en cerrar la conexión a DB.
+19

Cada vez que no cierra sus conexiones, un DBA mata a un gatito. – Eric

+0

Cada vez que no cierro una conexión, PHP hace el trabajo por mí: ¡PHP guarda los gatitos! ;; de hecho, lo que dije con la página hecha de bloques es bastante cierto: piense en cualquier CMS, como ejemplo: ¿cuándo sé que la conexión debe cerrarse? Al final de la ejecución del código PHP (no antes, ya que algunos "bloques" podrían necesitar hacer alguna consulta SQL) ;; entonces, cerrar la conexión a mano es bastante inútil ... ;; excepto, por supuesto, cuando está generando algo que lleva tiempo y no hace ninguna consulta DB, como un PDF, o algo así. –

5

La ventaja es que si va a hacer un procesamiento de larga duración pero ha terminado de consultar la base de datos, entonces no tiene sentido mantener abierta una conexión. Lo mismo ocurre con mantener abierta la sesión del usuario (que bloquea otras solicitudes).

Un ejemplo de esto podría ser la creación de un gran informe PDF. Esto podría demorar 20-30 segundos para crear y escribir el archivo, pero obtendrá todos los datos que necesita en el primer segundo.

Por lo general, también puede hacerlo automáticamente (suponiendo que la conexión no es persistente).

+1

¿Qué es una conexión persistente? 'mysqli (MYSQL_HOSTNAME, USERNAME, PASSWORD, DATABASE);' es persistente? – Tahtakafa

+0

A diferencia de la extensión mysql, mysqli no proporciona una función separada para abrir conexiones persistentes. Para abrir una conexión persistente, debe anteponer p: al nombre de host al conectarse. – Tarik