Saltar la navegación

3.2.1.- Establecimiento de conexiones.

Imagen de un enchufe con un relámpago amarillo dentro.
Enchufes Inteligentes (CC BY-SA)

Para establecer una conexión con una base de datos utilizando PDO, debes instanciar un objeto de la clase PDO pasándole los siguientes parámetros (solo el primero es obligatorio):

  • Origen de datos (DSN). Es una cadena de texto que indica qué controlador se va a utilizar y a continuación, separadas por el carácter dos puntos, los parámetros específicos necesarios por el controlador, como por ejemplo el nombre o dirección IP del servidor y el nombre de la base de datos.
  • Nombre de usuario con permisos para establecer la conexión.
  • Contraseña del usuario.
  • Opciones de conexión, almacenadas en forma de array.

Por ejemplo, podemos establecer una conexión con la base de datos 'proyecto' creada anteriormente de la siguiente forma:

$host = "localhost";
$db = "proyecto";
$user = "gestor";
$pass = "secreto";
$dsn = "mysql:host=$host;dbname=$db";
$conProyecto=new PDO($dsn, $user, $pass);
//se recomienda guardar los datos(host, user...) en variables porque si estos cambian
//solo tenemos que actualizar el valor de estas variables

Si como en el ejemplo, se utiliza el controlador para MySQL, los parámetros específicos para utilizar en la cadena DSN (separadas unas de otras por el carácter punto y coma) a continuación del prefijo mysql: son los siguientes:

  • host. Nombre o dirección IP del servidor.
  • port. Número de puerto TCP en el que escucha el servidor.
  • dbname. Nombre de la base de datos.
  • unix_socket. Socket de MySQL en sistemas Unix.

Si quisieras indicar al servidor MySQL que utilice codificación UTF-8 o UTF8mb4 (utf8 con soporte para "emojis" muy recomendable) para los datos que se transmitan, aunque hay más formas de hacerlo la siguiente es la más sencilla.

$dsn = "mysql:host=$host;dbname=$db;charset=utf8mb4";

Para saber más

En el manual de PHP puedes consultar más información sobre los controladores existentes, los parámetros de las cadenas DSN y las opciones de conexión particulares de cada uno.

Manual de PHP.

Una vez establecida la conexión, puedes utilizar el método getAttribute para obtener información del estado de la conexión y setAttribute para modificar algunos parámetros que afectan a la misma. Por ejemplo, para obtener la versión del servidor puedes hacer:

$version = $conProyecto->getAttribute(PDO::ATTR_SERVER_VERSION);
echo "Versión: $version";

Y si quieres por ejemplo que te devuelva todos los nombres de columnas en mayúsculas:

$version = $conProyecto->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);

Y muy importante para controlar los errores tendremos el atributo: ATTR_ERRMODE  con los posible valores:

  • ERRMODE_SILENT: El modo por defecto, no muestra errores (se recomienda en entornos en producción).
  • ERRMODE_WARNING: Además de establecer el código de error, emitirá un mensaje E_WARNING, es el modo empleado para depurar o hacer pruebas para ver errores sin interrumpir el flujo de la aplicación.
  • ERRMODE_EXCEPTION: Además de establecer el código de error, lanzará una PDOException que podemos capturar en un bloque try catch(). Lo veremos en el apartado 4.1.
$conProyecto->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Para cerrar la conexión hay que saber que la misma permanecerá activa durante el tiempo de vida del objeto PDO. Para cerrarla, 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.

$conProyecto = null;

Para saber más

En el manual de PHP, las páginas de las funciones getAttribute y setAttribute te permiten consultar los posibles parámetros que se aplican a cada una.

Manual getAttribute.

Manual setAttribute.

Autoevaluación

Pregunta

Para establecer una conexión con MySQL utilizando PDO, ¿dónde se puede indicar el número de puerto TCP?

Respuestas

En la cadena DSN que indica el origen de datos.

En el array en que figuran las opciones específicas de conexión con el servidor.

Retroalimentación