| |

Zend Framework: uso básico de la base de datos

Algo que siempre se usa que realmente solo se debería crear una vez en nuestras aplicaciones web es el gestor de la base de datos. Y si seguimos con el estudio del framework de Zend, nos encontramos con unas funcionalidades sobre la BD bastante aceptables, aunque ellos mismos digan que deben añadir cosas.

La principal característica es olvidarnos de la BD en cuestión y usarla, sea cual sea, de forma genérica. Por ahora este framework admite entre otras Microsoft SQL Server, MySQL, PostgreSQL y SQLite, estando basado en PDO. Lo siguiente, es que mediante una clase, el uso que normalmente le damos a una base de datos (selección, inserción y borrado) queda perfectamente resuelto.

Zend_Db_Adapter es la clase abstracta que se encarga de manejar la BD. Lo primero que deberemos hacer es importar la clase:

<?php
require_once 'Zend/Db.php';
?>

Para crearnos una instancia de Zend_Db_Adapter deberemos llamar a Zend_Db::factory(), indicándole el nombre del adaptador, por ejemplo para MySQL sería PDO_MYSQL y los parámetros de configuración de la base de datos: servidor, usuario, contraseña y nombre de la BD:

<?php
$parametros = array (
'host'     => '127.0.0.1',
'username' => 'usuario',
'password' => 'contraseña',
'dbname'   => 'nombre_bd');
$bd = Zend_Db::factory('PDO_MYSQL', $parametros);?>

Una vez que tenemos instanciada la bd, lo siguiente que debemos conocer es crear “anotaciones” contra la bd. ¿Qué es exactamente esto?, se trata de parsear texto para que lo entienda la bd mediante la sentencia quote(). Por ejemplo a la hora de crear sentencias. Y como no hay nada mejor que un ejemplo para entenderlo, aquí van unos cuantos:

<?php
// Una cadena de texto
$valor = $bd->quote('Moe"s, el bar de Moe');
// $valor es ahora '"Moe\"s, el bar de Moe"'
// Un array
$valor = $bd->quote(array('a', 'b', 'c');
// $valor es ahora '"a", "b", "c"'
?>

Hay veces que en vez de andar pegando texto y variables, es más cómodo (no sé si más eficiente) usar variables para las entradas de texto:

<?php
// Dentro de la cláusula WHERE
$where = $bd->quoteInto('id = ?', 1);
// $where es igual a 'id = "1"'
$where = $bd->quoteInto('id IN(?)', array(1, 2, 3));
// $where es igual a 'id IN("1", "2", "3")'
?>

Ahora solo nos falta saber cómo realizar consultas, insertar datos, y eliminarlos.

Para realizar las consultas, usaremos la sentencia query(), la cual podemos pasarle un texto formateado como hemos indicado anteriormente o el texto y sus variables:

<?php
$sql = $bd->quoteInto(
'SELECT * FROM tabla WHERE campo = ?',
'valor'
);
$res = $db->query($sql);
$result = $db->query(
'SELECT * FROM tabla WHERE campo = :valor',
array('valor' => 'lo que sea')
);
$sentencia = $db->prepare('SELECT * FROM tabla WHERE campo = :valor');
$sentencia->bindValue('valor', 'lo que sea');
$sentencia->execute();
?>

Qué método usar lo dejamos a gusto del programador, según con lo que nos sintamos más cómodo o lo que nos venga mejor en cada momento. El cómo recuperar los datos lo veremos más adelante.

La inserción, actualización y eliminación es algo parecido a lo que hemos visto anteriormente:

<?php
// INSERCIÓN
$fila = array (
'nombre'   => 'Pepito',
'apellido' => 'Pérez'
);
$tabla = 'usuarios';
// Podemos obtener el numero de filas insertadas y el último id
$num_filas = $bd->insert($tabla, $fila);
$ult_id = $bd->lastInsertId();
// ACTUALIZACIÓN
$set = array (
'apellido' => 'Sánchez',
);
$tabla = 'usuarios';
$where = $bd->quoteInto('nombre = ?', 'Pepito');
// Podemos obtener el número de filas afectadas
$num_filas = $bd->update($tabla, $set, $where);
// BORRADO
$tabla = 'usuarios';
$where = $bd->quoteInto('nombre = ?', 'Pepito');
// Nos devuelve el número de filas borradas
$num_filas = $bd->delete($tabla, $where);
?>

Y ya por último solo nos falta saber como recuperar los datos, para ello tendremos que usar un código parecido al siguiente, usando una de las funciones específicas para ello:

<?php
$res = $bd->query($sql);
$filass = $res->fetchAll();
?>
  • fetchAll(): devuelve todas las filas y columnas en un array secuencial.
  • fetchAssoc(): devuelve todas las columnas de todas las filas en un array asociativo, la primera columna se reserva para la clave.
  • fetchCol(): devuelve la primera columna de todas las filas.
  • fetchOne(): devuelve el primer valor.
  • fetchPairs(): devuelve una serie de pares clave-valor, la primera columna es la clave del array y la segunda el valor del array.
  • fetchRow(): devuelve la primera fila.

Si nos encontramos con la necesidad de crear transacciones, deberemos usar las siguientes sentencias:

<?php
// Para empezar la transacción
$bd->beginTransaction();
// Para afirmar los cambios
$bd->commit();
// Para deshacer los cambios
$bd->rollBack();
?>

Similar Posts