Utilizar PHP para conectar con una base de datos nos permite tener un almacenamiento seguro en el que centralizar la información que nuestro código empleará para componer lo que se debe visualizar en la web en diversas circunstancias.

Para ello podemos utilizar una serie de diferentes extensiones php:

  • mysql : Ya obsoleta.
  • mysqli : Una versión más moderna de la librería de conexión con mysql.
  • pdo : Librería genérica que permite conectar con muchos motores de bases de datos.

Utilizaremos la última, ya que conocer su funcionamiento nos servirá con otros motores de bases de datos que no sean MySQL.

Esta librería tiene un planteamiento orientado a objetos, donde deberemos crear objetos con new, e invocar ciertos métodos en ellos (funciones del objeto), especificándolos con “->”. El tratamiento de errores puede ser según el valor que devuelvan las llamadas a los métodos (como hacen gran parte de las funciones al devolver falso en caso de error), o mediante excepciones.

Veamos el siguiente código de ejemplo:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"></head><body>
<?php
echo '<h1>Ejemplo MySQL</h1>';
// Conectamos con la base de datos

$db = new PDO('mysql:host=localhost;dbname=dbtest;charset=utf8', 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

try {
	$stmt = $db->prepare("SELECT * FROM articulos WHERE pais=:mycountry");
	$stmt->execute( array(':mycountry' => 'USA') );
	$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $ex) {
    echo "Ocurrió un error<br>";
    echo $ex->getMessage();
    exit;
}

echo '<ul>';
foreach ($rows as $row) {
	echo '<li>'.$row['id'].' : ('.$row['pais'].') '.$row['titulo'].'</li>';
}
echo '</ul>';

?>
</body></html>

En primer lugar, creamos un objeto $db con la información de conexión a base de datos, el usuario (root) y la contraseña (en blanco en este caso). A continuación, mediante los métodos setAttribute() establecemos que el manejo de errores será mediante excepciones, y que no debe emular instrucciones prepare automáticamente.

Los errores por excepciones, en lugar de utilizar un valor de devolución en las llamadas, se emplean de manera diferente. Si una o varias líneas de código se ejecutan sin problemas, no pasa nada y se devuelve lo que normalmente se tenga que devolver. Pero si entre esas líneas de código, o dentro de las funciones o métodos a invocar, ocurre un error, se dispara lo que se llama una excepción . Si no se hace nada más, al dispararse se detiene inmediatamente el código, mostrando el mensaje de error del sistema asociado a esa excepción.

Las excepciones pueden ser manejadas, si utilizamos una instrucción try-catch como en el ejemplo, todo el código dentro del bloque try estará supervisado por si ocurre algún error. Si se ejecuta sin problemas, se salta la parte catch y continua la ejecución. Pero si alguna de las instrucciones dentro de try genera una excepción, se detiene la ejecución de ese bloque inmediatamente, y se pasa el control al bloque catch, pasando por parámetro el objeto excepción generado, que tendrá en su interior información del mensaje de error, línea de código donde ocurrió, etc.

En cualquier caso, no es obligatorio utilizar siempre bloques try-catch , pudiendo dejar que las excepciones detengan por si solas la ejecución. Solamente cuando queremos nosotros capturar el error, para mostrar un mensaje distinto, ocultarlo totalmente, o procesarlo de alguna manera.

En nuestro caso, lo utilizamos para crear primero con $db->prepare un objeto stmt , que contiene la preparación de la sentencia SQL que comienza con “SELECT” , que accederá a una tabla artículos para obtener todas las filas cuyo valor de columna country coincida con una asignación predeterminada. A continuación, realizamos la asignación del parámetro mycountry con el valor específico USA para que ese sea el país filtrado, y mediante fetchAll obtenemos de golpe todos los registros en un array, que al especificar PDO::FETCH_ASSOC será asociativo respecto a los índices de las filas y las claves primarias.

De esta forma, con un simple foreach al haber obtenido todos los elementos, podemos mostrarlos como en el ejemplo en una lista no ordenada.

Este es un ejemplo inicial de uso de base de datos, veremos en otro artículo de forma ampliada como insertar elementos, eliminarlos o buscar entre los diferentes registros.