Ticker

6/recent/ticker-posts

PHP - Conexión PDO (PHP Data Object)


Una de las tareas mas comunes en el desarrollo de aplicaciones web es la conexión hacia la bases de datos; para lo cual PHP no es a excepción y nos ofrece multiples métodos de conexión que dependen del tipo de base de datos (SQL Server, MySQL, PostgreSQL, Oracle, etc), y en la actualidad con PDO es la más segura y estable con soporte para distintos conexiones de motores de base de datos.

1. Descripción

La extensión Objetos de Datos de PHP (PDO por sus siglás en inglés) determina un interfaz ligera para poder acceder a bases de datos en PHP, en base a cada controlador de bases de datos que implemente la interfaz PDO que puede exponer características específicas de la base de datos, como las funciones habituales de la extensión. Se establece que no se puede realizar ninguna de las funciones de la bases de datos utilizando la extensión PDO por sí misma, es decir se debe utilizar un controlador de PDO específico de la base de datos para tener acceso al servidor de bases de datos.

PDO proporciona una capa de abstracción de acceso a datos, lo que significa que, independientemente de la base de datos que se esté utilizando, se usan las mismas funciones para realizar consultas y obtener el conjunto de datos. PDO no proporciona una abstracción de bases de datos; no reescribe sentencia SQL ni emula características ausentes.

2. Ventajas

  • Manejo de conexiones con los diferentes proveedores de base de datos.
  • Manejo de los errores de conexión a base de datos.
  • Cierre y persistencias de las conexiones a base de datos.
  • Manejo de las transacciones y permite el autocommit.
  • Inserciones de procedimientos e instrucciones preparadas.
  • Manejo de errores y alertas en la interacción con la base de datos.


3. Sintaxis general.

En primer instancia se referencia a la clase PDO que tiene los siguientes parámetros:

$pdo = new PDO($dsn, $username, $password, $options);

Donde se determina lo siguiente:

  1. $dsn: (data source name) cadena de texto que especifica la fuente de datos.
  2. $username: nombre de usuario de la base de datos.
  3. $password: clave de usuario de la base de datos.
  4. $options: array con parámetros adicionales para la conexión.

Teniendo en consideración el DSN con la siguiente estructura:

$dsn = 'mysql:host=DBHOST;port=DBPORT;dbname=DBNAME';

En donde se:

  1. mysql: especifica el driver de base de datos a utilizar, en este caso MySQL.
  2. DBHOST: define el Hostname o IP del servidor de base de datos.
  3. DBPORT: el puerto para la conexión, en MySQL el puerto por defecto es 3306.
  4. DBNAME: especifica el nombre de la base de datos a utilizar.

Con esta información completamos la sintaxis para conexión a base de datos:

1
2
3
4
5
6
7
8
9
<?php
// parameters
$dsn = 'mysql:host=localhost;port=3306;dbname=dbname';
$username = 'dbuser';
$password = 'password';
$options = [];

$pdo = new PDO($dsn, $username, $password, $options);
?>


4. Disponibilidad y controladores

PDO esta disponible a partir de la versión 5.0 de PHP en base a los CONTROLADORES para la conexión hacia las siguientes base de datos:

  1. CUBRID (PDO) — Funciones de CUBRID (PDO_CUBRID)
  2. MS SQL Server (PDO) — Funciones de Microsoft SQL Server y Sybase (PDO_DBLIB)
  3. Firebird (PDO) — Funciones de Firebird (PDO_FIREBIRD)
  4. IBM (PDO) — Funciones de IBM (PDO_IBM)
  5. Informix (PDO) — Funciones de Informix (PDO_INFORMIX)
  6. MySQL (PDO) — Funciones de MySQL (PDO_MYSQL)
  7. MS SQL Server (PDO) — Funciones de Microsoft SQL Server (PDO_SQLSRV)
  8. Oracle (PDO) — Funciones de Oracle (PDO_OCI)
  9. ODBC y DB2 (PDO) — Funciones de ODBC y DB2 (PDO_ODBC)
  10. PostgreSQL (PDO) — Funciones de PostgreSQL (PDO_PGSQL)
  11. SQLite (PDO) — Funciones de SQLite (PDO_SQLITE)

Los controladores mencionados esta en relación a la versión de 8 de PHP, recordarles que en anteriores versiones existía el controlador PDO_4D (4D).


5. Ejemplo de conexión:

  1. Crear el archivo cnnpdo.php que contenga la conexión para MySQL.
  2. Determinar la codificación de caracteres en UTF8 para evitar inconvenientes con caracteres especiales.
  3. Determinar que PDO devuelva los datos como objetos en lugar de arrays.
  4. Finalmente capturar las excepciones para detectar y captura de errores de PDO.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?php
// parameters
$dsn = 'mysql:host=localhost;port=3306;dbname=dbname';
$username = 'dbuser';
$password = 'password';

$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4'",
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ
);

try {
    $pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
    echo $e->getMessage();
    die();
}

Recuerdan que también la conexión se puede realizar con todo los controladores detallados en el punto 4.


6. Validar Conexión:

  1. Crear el archivo index.php para realizar la consulta.
  2. Incluir el archivo de conexión - cnnpdo.php 
  3. Preparar la consulta de tipo SQL.
  4. Finalmente devolver el resultado.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?php
// include connection
require 'pdo.php';

// prepare query
$statement = $pdo->prepare("SELECT * FROM employes");
$statement->execute();

// print results
while ($result = $statement->fetch()) {
    echo $result->name . '<br>';
}
?>

7. Referencias:

Documentación oficial.

Demos en GitHub con conexión PDO.

Microsoft - Clase PDO.


Publicar un comentario

0 Comentarios