Conexiones y su administración
Las conexiones se establecen creando instancias de la clase base PDO.
No importa el controlador que se utilice; siempre se usará el nombre de
la clase PDO. El constructor acepta parámetros para especificar el
origen de la base de datos (conocido como DSN) y, opcionalmente, el nombre de usuario
y la contraseña (si la hubiera).
Ejemplo #1 Conectarse a MySQL
<?php
$mbd = new PDO('mysql:host=localhost;dbname=prueba', $usuario, $contraseña);
?>
Si hubieran errores de conexión, se lanzará un objeto PDOException
.
Se puede capturar la excepción si fuera necesario manejar
la condición del error, o se podría optar por dejarla en manos de un
manejador de excepciones global de aplicación configurado mediante
set_exception_handler().
Ejemplo #2 Manejo de errores de conexión
<?php
try {
$mbd = new PDO('mysql:host=localhost;dbname=prueba', $usuario, $contraseña);
foreach($mbd->query('SELECT * from FOO') as $fila) {
print_r($fila);
}
$mbd = null;
} catch (PDOException $e) {
print "¡Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
Advertencia
Si la aplicación no captura la excepción lanzada por el constructor
de PDO, la acción predeterminada que toma el motor zend es la de finalizar
el script y mostrar información de seguimiento. Esta información probablemente revelará
todos los detalles de la conexión a la base de datos, incluyendo el nombre de usuario y
la contraseña. Es su responsabilidad capturar esta excepción, ya sea
explícitamente (con una sentencia catch
) o implícitamente por medio de
set_exception_handler().
Una vez realizada con éxito una conexión a la base de datos, será devuelta una instancia
de la clase PDO al script. La conexión permanecerá activa durante el tiempo
de vida del objeto PDO. Para cerrar la conexión, es necesario
destruir el objeto asegurándose de que todas las referencias a él existentes sean
eliminadas; esto se puede hacer asignando null
a la variable que contiene el
objeto. Si no se realiza explícitamente, PHP cerrará automáticamente
la conexión cuando el script finalice.
Nota:
Si aún existen otras referencias a esta instancia de PDO (tales como desde una
instancia de PDOStatement, o desde otras variables que hacen referencia a la misma
instancia de PDO), estas también han de eliminarse (por ejemplo, asignando NULL a
la variable que hace referencia al PDOStatement).
Ejemplo #3 Cerrar una conexión
<?php
$mbd = new PDO('mysql:host=localhost;dbname=prueba', $usuario, $contraseña);
// Utilizar la conexión aquí
$sth = $mbd->query('SELECT * FROM foo');
// Ya se ha terminado; se cierra
$sth = null;
$mbd = null;
?>
Muchas aplicaciones web se beneficiarán del uso de conexiones persistentes a
servidores de bases de datos. Las conexiones persistentes no son cerradas al final del
script, sino que son almacenadas en caché y reutilizadas cuando otro script solicite una
conexión que use las mismas credenciales. La caché de conexiones persistentes
permite evitar la carga adicional de establecer una nueva conexión cada vez
que un script necesite comunicarse con la base de datos, dando como resultado
una aplicación web más rápida.
Ejemplo #4 Conexiones persistentes
<?php
$mbd = new PDO('mysql:host=localhost;dbname=prueba', $usuario, $contraseña, array(
PDO::ATTR_PERSISTENT => true
));
?>
Nota:
Para utilizar conexiones persistentes, se deberá establecer
PDO::ATTR_PERSISTENT
en las opciones del array del controlador
pasado al constructor de PDO. Si este atributo se establece con
PDO::setAttribute() después de la instanciación del
objeto, el controlador no utilizará conexiones persistentes.
Nota:
Si se usa el controlador PDO y las bibliotecas ODBC admiten el aprovisionamiento
de conexiones ODBC (unixODBC y Windows lo hacen; podrían haber
más), se recomienda no utilizar las conexiones persistentes de PDO,
y, en su lugar, dejar el almacenamiento en caché de conexiones a la capa del aprovisionamiento
de conexiones de ODBC. La provisión de conexiones de ODBC se comparte con otros
módulos en el proceso; si se le indica a PDO que almacene en caché la conexión, entonces
dicha conexión nunca será devuelta a la provisión de conexiones de ODBC,
dando como resultado la creación de conexiones adicionales para servir a los
demás módulos.