PDO es una extensión de acceso a datos para PHP5, la cual nos permite conectar a multitud de sistemas gestores de bases de datos indicando el driver correspondiente.
Sus grandes ventajas radican en que; Es una extensión eficiente que fue desarrollada en C. Sus métodos son independientes del sistema gestor de bases de datos que usemos, permitiendo que una aplicación pueda migrar de un motor de bd a otro con sólo indicar el driver correspondiente al nuevo motor. Y Previene que en las consultas se inyecte SQL malicioso (SQL Injection) usando consultas parametrizadas.
Comenzamos con unos ejemplos, para los que he tomado MySQL como SGBD:
Conexión PDO
$db = new PDO('mysql:host=' . $host . ';dbname=' . $db, $usuario, $contrasena);
//Juego de caracteres
$db->query('SET NAMES UTF8');
Consulta PDO
//preparamos la consulta
$consulta = $db->prepare('
SELECT modelo
FROM coche
WHERE marca = :valor
');
//parametrizamos los valores que vamos a enviar a la consulta, evita SQL injection
$consulta->bindValue(':valor', 'mercedes', PDO::PARAM_STR);
//ejecutamos la consulta
$consulta->execute();
//imprimimos los valores devueltos en un array asociativo
print_r($consulta->fetchAll(PDO::FETCH_ASSOC));
Como puedes ver es muy sencillo usar PDO, explicaré lo que hacemos en cada paso.
- El método prepare() deja lista la consulta para ser ejecutada.
- bindValue() prepara los parámetros que se le van a enviar a la consulta previniendo inyecciones SQL ¡Adoro esto! Los parámetros deben tener siempre el formato :nombreParametro para que se pueda identificar el valor en la consulta. Ademá podemos indicar el tipo de datos que vamos a enviar PARAM_STR o PARAM_INT.
- La tarea de Execute() es bastante obvia, ejecutar la consulta que hemos preparado.
- Y fechAll() devuelve todos los valores de la consulta en un arreglo asociativo, también se podría devolver mediante el método fech() si queremos recorrer los valores con un bucle.
Existen otras maneras de pasar a una consulta parámetros de entrada, personalmente no las uso porque me acostumbré a trabajar con la función bindValue() pero son tan correctas como ésta última. Veámoslas a continuación:
//Los parametros se indican con ?
$consulta = $db->prepare('
SELECT modelo
FROM coche
WHERE marca = ?
AND color = ?
');
//Ejecutamos la consulta y pasamos los parámetros en el mismo orden de aparición en la consulta
$consulta->execute(array('mercedes', 'rojo'));
$consulta = $db->prepare('
SELECT modelo
FROM coche
WHERE marca = :valor
');
//agregamos los valores al parámetro
$consulta->bindParam(':valor', 'mercedes');
//Ejecutamos la consulta
$consulta->execute();
Referencias: jourmoly.com.ar | Manual Oficial
















