2009-06-25 12 views
61

Al abrir una conexión MySQL en PHP con sólo funciones de MySQL incorporadas de PHP, hago lo siguiente:conexiones Hacer SQL abiertas con DOP en PHP tienen que ser cerrado

$link = mysql_connect($servername, $username, $password); 
mysql_select_db($dbname); 
//queries etcetera 
mysql_close($link); 

Al abrir una conexión con DOP, que se ve así:

$link = new PDO("mysql:dbname=$dbname;host=$servername",$username,$password); 
//prepare statements, perform queries 

¿tengo que cerrar explícitamente la conexión como lo hago con mysql_connect() y mysql_close()? Si no, ¿cómo sabe PHP cuando termino con mi conexión?

TIA.

Respuesta

76

Use $link = null para informar a PDO que puede cerrar la conexión.

PHP: PDO Connections & Connection Management

Al conectarse con éxito a la base de datos, una instancia de la clase PDO se devuelve a su script. La conexión permanece activa durante el tiempo de vida de ese objeto PDO. Para cerrar la conexión, debe destruir el objeto, asegurándose de que se eliminen todas las referencias restantes: haga esto asignando NULL a la variable que contiene el objeto. Si no hace esto explícitamente, PHP cerrará automáticamente la conexión cuando finalice su secuencia de comandos.

+1

Gracias! Muy apreciado. – benjy

+1

Me pregunto si PDO dtor cierra explícitamente la conexión o lo deja en PHP al igual que sucede cuando 'mysql_close()' no se usa al final de la secuencia de comandos (o en '__destruct()' de su clase db) ? Del manual parece que cuando se destruye el objeto PDO, la conexión también se cierra. Importante debido a esto: http://stackoverflow.com/a/2960656/372654. Parece que sí desde el código fuente de PDO, pero ... –

+5

¿No fue un '' unset() 'el objeto PDO en lugar de establecerlo en NULL? ¡Realmente quiero aclaraciones sobre esto! –

11

Cuando el script PHP termina de ejecutarse, todas las conexiones se cierran. Además, no tiene que cerrar explícitamente su conexión con mysql_close().

0

http://uk3.php.net/pdo

Por lo que sé que no pude ver de todos modos para cerrarla en el manual de PHP, y los ejemplos de secuencias de comandos rápidamente Le miraba nunca se ha cerrado la conexión de todos modos por lo que pude ver.

5

También puede limitar sus conexiones dentro de las funciones locales. De esta forma, la conexión se cierra tan pronto como se complete la función.

11

PDO no ofrece esa función por sí mismo. Las conexiones a través de PDO se gestionan indirectamente mediante el recuento de objetos de PDO en PHP.

Pero a veces desea cerrar la conexión de todos modos, independientemente del recuento. Ya sea porque no puede controlarlo, lo necesita con fines de prueba o similar.

puede cerrar la conexiónMySQL con DOP mediante la ejecución de una consulta SQL.Cada usuario que es capaz de conectar con el servidor MySQL es capaz de KILL al menos su propio hilo:

/* 
* Close Mysql Connection (PDO) 
*/ 

$pdo_mysql_close = function (PDO $connection) { 

    $query = 'SHOW PROCESSLIST -- ' . uniqid('pdo_mysql_close ', 1); 
    $list = $connection->query($query)->fetchAll(PDO::FETCH_ASSOC); 
    foreach ($list as $thread) { 
     if ($thread['Info'] === $query) { 
      return $connection->query('KILL ' . $thread['Id']); 
     } 
    } 
    return false; 
}; 

$pdo_mysql_close($conn); 

Mysql Documentación relacionada:

Relacionados Preguntas sobre Stackoverflow:

1

Bueno ya que el $link de la DOP se asigna un objeto, PHP establecería que a medida nula en cuanto el script se ejecuta de manera que ya no es un objeto. Por lo tanto, puede hacer:

$link = new PDO("mysql:dbname=$dbname;host=$servername",$username,$password); 

//prepare statements, perform queries 

$link = null; 
Cuestiones relacionadas