PDO
PHP Manual

Conexiones y Administración de Conexiones

Las conexiones se establecen creando instancias de la clase base PDO. No importa que driver quieras utilizar; usa siempre el nombre de la clase PDO. El constructor acepta parámetros para especificar la fuente de datos (conocido como DSN) y opcionalmente el nombre de usuario y el password (si procede).

Ejemplo #1 Conectando con MySQL

<?php
$dbh 
= new PDO('mysql:host=localhost;dbname=test'$user$pass);
?>

Si hay errores de conexión, verás un objeto del tipo PDOException en pantalla. Puedes recoger la excepción si quieres para manejar la condición del error, o quizá optes por dejarlo para una aplicación que las maneje globalmente que previamente hayas configurado vía set_exception_handler().

Ejemplo #2 Manejo de errores de conexión

<?php
try {
    
$dbh = new PDO('mysql:host=localhost;dbname=test'$user$pass);
    foreach(
$dbh->query('SELECT * from FOO') as $row) {
        
print_r($row);
    }
    
$dbh null;
} catch (
PDOException $e) {
    print 
"Error!: " $e->getMessage() . "<br/>";
    die();
}
?>

Advertencia

Si tu aplicación no recoge la excepción lanzada por el constructor PDO, la acción por defecto que toma el motor zend es la de terminar el script y mostrar el rastreo de origen. Este rastreo revelará todos los detalles de la conexión a la base de datos, incluyendo nombre de usuario y contraseña. Es tu responsabilidad recoger esta excepción, ya sea explícitamente (con una definición de recogida) o implícitamente por medio de set_exception_handler().

Una vez conectes con éxito a la base de datos, una instancia de la clase PDO se devolverá a tu script. La conexión continuará activa mientras siga activo el objeto PDO. Para cerrar la conexión, tendrás que destruir el objeto asegurándote de que todas las referencias existentes hacia el sean eliminadas--puedes hacerlo asignando NULL a la variable que sostiene el objeto. Si no quieres hacerlo explícitamente, PHP cerrará automáticamente la conexión cuando el script termine.

Ejemplo #3 Cerrando una conexión

<?php
$dbh 
= new PDO('mysql:host=localhost;dbname=test'$user$pass);
// Usa la conexión aquí


// ya has terminado; cierrala
$dbh null;
?>

Muchas aplicaciones web se benefician creando conexiones persistentes a servidores de bases de datos. Las conexiones persistentes no son cerradas al final del script, por lo que son recogidas y reutilizadas cuando otro script solicita una conexión usando las mismas credenciales. La caché de la conexión persistente permite evitar gastos innecesarios en establecer una nueva conexión cada vez que un script necesita comunicar con la base de datos, dando como resultado una notable mejora en la velocidad de la aplicación web.

Ejemplo #4 Conexiones persistentes

<?php
$dbh 
= new PDO('mysql:host=localhost;dbname=test'$user$pass, array(
    
PDO::ATTR_PERSISTENT => true
));
?>

Nota:

Si deseas utilizar conexiones persistentes, deberás configurar PDO::ATTR_PERSISTENT en el array de opciones de drivers pasándoselo al constructor PDO. Si establece este atributo con PDO::setAttribute() después de la instanciación del objeto, el driver no utilizará conexiones persistentes.

Nota:

Si estás utilizando el driver PDO ODBC y tus librerias ODBC soportan agrupamiento de conexiones (unixODBC y Windows lo hacen; pueden haber más), entonces es recomendable que no uses conexiones persistentes PDO, en su lugar deja la conexión cacheando con la capa ODBC del agrupamiento de conexiones. El agrupamiento de conexiones ODBC está compartido con otros módulos en el proceso; si se le dice al PDO que cachee la conexión, entonces esta conexión nunca será devuelta al agrupamiento de conexiones ODBC, dando como resultado conexiones adicionales creadas para el servicio de esos módulos.


PDO
PHP Manual