2010-09-03

PHP Data Objects – PDO

PDO es una interface de acceso a datos que nos permite, mediante varios drivers, conectarnos a diferentes bases de datos. Olvídate de esto, esto, esto e incluso de esto otro, ahora solo debes preocuparte por PDO. Esta librería escrita en C viene activada por defecto desde PHP 5.1 por lo cual la podrás utilizar en la mayoría de los servidores que actualmente soportan PHP5.

La conexión

Para todos los ejemplos utilizaré MySQL, pero también podria utilizar cualquier otra de las bases de datos soportadas adaptando un poco el código que sigue:
1
$db = new PDO('driver:host=servidor;dbname=bd', user, pass);
Y el ejemplo práctico:
1
$db = new PDO('mysql:host=localhost;dbname=pruebas', 'root', '');
Ahora en $db tenemos una instancia de PDO_MySQL

Primera consulta

Para la primer consulta haremos uso de prepare, execute y fetch.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
require 'conexion.php';
 
//Nos conectamos
$db = new PDO('mysql:host=' . $servidor . ';dbname=' . $bd, $usuario, $contrasenia);
 
//Preparamos la consulta para dejarla lista para su ejecución
$consulta = $db->prepare('SELECT * FROM items');
 
//Ejecutamos la consulta
$consulta->execute();
 
//Recorremos el set de resultados mostrando la información
while($fila = $consulta->fetch())
{
 echo $fila[0] . '  ' . $fila[1] . '<br />';
}
 
//Cerramos la conexión a la vez que destruimos nuestra instancia de PDO
$db = null;

Como verás no es nada complicado y es muy similar a lo que nos acostumbramos a hacer con las clásicas funciones mysql_.
Con las funciones MySQL también debíamos validar estrictamente los parámetros de entrada para evitar inyecciones SQL. En este caso, PDO lo hará por nosotros siempre y cuando utilicemos alguna de las varias formas que nos provee para realizar consultas parametrizadas. Este es un ejemplo:
1
2
3
4
5
//Preparamos la consulta marcando donde irán los parametros con ?
$consulta = $db->prepare('SELECT * FROM items WHERE id_item = ? OR id_item = ?');
 
//Ejecutamos la consulta incluyendo los parámetros en el mismo orden en el que deben incluirse
$consulta->execute(array(2, 4));
El ejemplo anterior generará una consulta de la siguiente manera:
1
SELECT * FROM items WHERE id_item = '2' OR id_item = '4'
Otra manera de hacer lo mismo:
1
2
3
4
5
6
7
8
9
10
$id = 6;
 
//Esta vez utilizamos un nombre-clave para cada parámetro
$consulta = $db->prepare('SELECT * FROM items WHERE id_item = :id');
 
//Con dicho nombre-clave, agregamos el valor del parámetro
$consulta->bindParam(':id', $id);
 
//Y ejecutamos la consulta
$consulta->execute();
1
SELECT * FROM items WHERE id_item = '6'
Ahora bien, si no confían, intenten inyectar SQL concatenando alguna sentencia en la variable $id y verán los resultados ;-)

Altas, Bajas y Modificaciones

El mecanismo sigue siendo el mismo que en las consultas anteriores, preparar la consulta, agregar los parámetros y ejecutar.
alta
1
2
3
4
5
6
$item = $_POST['item'];
 
$inserta = $db->prepare('INSERT INTO items (item) VALUES (:item)');
$inserta->bindParam(':item', $item);
 
$inserta->execute();
baja
1
2
3
4
5
6
$id = $_GET['id'];
 
$borra = $db->prepare('DELETE FROM items WHERE id_item = :id');
$borra->bindParam(':id', $id);
 
$borra->execute();
modificación
1
2
3
4
5
6
7
8
$item = $_POST['item'];
$id = $_POST['id'];
 
$actualiza = $db->prepare('UPDATE items SET item = :item WHERE id_item = :id');
$actualiza->bindParam(':item', $item);
$actualiza->bindParam(':id', $id);
 
$actualiza->execute();
Y esto es todo por el momento, solo un primer acercamiento a PDO. Podés bajarte todos estos ejemplos y varios mas desde aquí. Para que funcionen debes contar con un servidor que soporte PHP5 con las librerías PDO_MySQL instaladas, debes crear una base de datos, ejecutar el fichero items.sql y editar el archivo conexion.php con los datos que correspondan.

No hay comentarios: