2011-07-24 10 views
7

Estoy usando PHP para consultar la base de datos MySQL en mi sitio web. Por favor responda las siguientes preguntas:Conexión de la base de datos MySQL no cerrada: ¿qué pasará?

  1. ¿Qué pasará si no uso mysql_close() cuando termino de consultar la base de datos al final? La conexión permanecerá abierta? Si es así, ¿hasta cuánto tiempo? Si no, ¿por qué?
  2. Si abro y cierro una conexión a MySQL en varios lugares en una página web , ¿cómo se ve afectado el rendimiento? es decir, la conexión se realiza nuevamente cada vez que se requiere algún acceso a la base de datos en una sola página web.
  3. ¿Cómo se relaciona el mysql_close() con el rendimiento? ¿Debo abrir una nueva conexión cada vez que se requiera algún acceso a la base de datos O debería mantener solo una conexión y cerrarla al final?
  4. Si no cierro la conexión, si el usuario está intentando acceder de nuevo a algunos datos, ¿se utilizará la nueva conexión o se usará la antigua conexión abierta ?

Respuesta

8
  1. Se cerrará automáticamente cuando el script PHP se ejecute durante la fase de destrucción.
  2. El rendimiento se verá negativamente afectado. Abrir un nuevo zócalo (especialmente a un servidor de base de datos externo) es más costoso y consume más tiempo que simplemente mantener un puntero a la conexión actual en la memoria.
  3. Ver respuesta no. 2
  4. El acceso a los datos se realizará mediante una nueva solicitud de PHP. Por lo tanto, tendrá una nueva conexión a la base de datos. No hay problemas allí.

aconsejaría a abrir la conexión a la base de datos durante la fase de construcción, reutilizar esa conexión durante toda la ejecución del script (si se basa OO, asignar una variable de clase para su conexión de base de datos y utilizar $this->db durante el todo el script), y lo cierra durante la destrucción (o no se moleste en cerrarlo, ya que se cerrará de todos modos, incluso cuando no se haya declarado específicamente).

1

Existe una pérdida de rendimiento insignificante al cerrar una conexión, en comparación con el uso de recursos de mantenerla abierta cuando no la necesita. Es mejor cerrar una conexión tan pronto como haya terminado con ella, y abrirla de nuevo cuando lo necesite.

1

Si usa conexiones no persistentes, todas las conexiones MySQL abiertas se cerrarán automáticamente cuando la secuencia de comandos PHP finalice la ejecución.

2

De php.net:

Usando mysql_close() no suele ser necesaria, ya que no persistentes son cerradas automáticamente al final de la ejecución del script.

por rendimiento depende de las situaciones, durante cuánto tiempo se utiliza, durante cuánto tiempo está inactivo y demás (por ejemplo, ejecución prolongada). En la mayoría de los casos, hay un patrón único con el que tiene una conexión abierta y realiza todas las consultas con ese identificador abierto. Pero no es cierto que en general, como mysql_connect sí es tipo de soportes que:

Si se realiza una segunda llamada a mysql_connect() con los mismos argumentos, no se establecerá un nuevo enlace, pero en su lugar, el enlace identificador del enlace ya abierto será devuelto.El parámetro new_link modifica este comportamiento y hace que mysql_connect() abra siempre un nuevo enlace, incluso si se llamó a mysql_connect() anteriormente con los mismos parámetros.

Así que, básicamente, mysql_close no es muy necesario cuando se trata de secuencias que se ejecutan cortos.

Cuestiones relacionadas