06.09.2014 Views

Bases de datos: Software libre - Universitat Oberta de Catalunya

Bases de datos: Software libre - Universitat Oberta de Catalunya

Bases de datos: Software libre - Universitat Oberta de Catalunya

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

© FUOC • 71Z799014MO 24 Desarrollo <strong>de</strong> aplicaciones en conexión con bases <strong>de</strong> <strong>datos</strong><br />

• getRow(): <strong>de</strong>vuelve sólo la primera fila <strong>de</strong> la hoja <strong>de</strong> resultados.<br />

• getCol(): <strong>de</strong>vuelve sólo la columna indicada <strong>de</strong> la hoja <strong>de</strong> resultados.<br />

De la misma manera que en las <strong>libre</strong>rías nativas, hay métodos que proporcionan<br />

información sobre la consulta en sí:<br />

• numRows(): número <strong>de</strong> filas <strong>de</strong> la hoja <strong>de</strong> resultados.<br />

• numCols(): número <strong>de</strong> columnas <strong>de</strong> la hoja <strong>de</strong> resultados.<br />

• affectedRows(): número <strong>de</strong> filas <strong>de</strong> la tabla afectadas por la sentencia <strong>de</strong><br />

actualización, inserción o borrado.<br />

1.4.2. Transacciones<br />

PEAR::DB proporciona mecanismos para tratar las transacciones in<strong>de</strong>pendientemente<br />

<strong>de</strong>l SGBD con que trabajemos.<br />

Como ya hemos comentado, la operativa con las transacciones está relacionada<br />

con las sentencias begin, commit y rollback <strong>de</strong> SQL. PEAR::DB envuelve<br />

estas sentencias en llamadas a métodos suyos, <strong>de</strong>l modo siguiente:<br />

Atención<br />

En MySQL sólo funcionará<br />

el soporte <strong>de</strong> transacciones si<br />

la base <strong>de</strong> <strong>datos</strong> está almacenada<br />

con el mecanismo<br />

InnoDB.<br />

En PostgreSQL no hay restricción<br />

alguna.<br />

// Desactivamos el comportamiento <strong>de</strong> COMMIT automático.<br />

$db->autocommit(false);<br />

..<br />

..<br />

if (...) {<br />

$db->commit();<br />

} else {<br />

$db->rollback();<br />

}<br />

En ningún sitio...<br />

... se hace un begin. Al <strong>de</strong>sactivar<br />

el autocommit (que está<br />

activado por <strong>de</strong>fecto) todas las<br />

sentencias pasarán a formar<br />

parte <strong>de</strong> una transacción, que<br />

se registrará como <strong>de</strong>finitiva<br />

en la base <strong>de</strong> <strong>datos</strong> al llamar al<br />

método commit() o bien se<br />

<strong>de</strong>sechará al llamar al método<br />

rollback(), volviendo la<br />

base <strong>de</strong> <strong>datos</strong> al estado en el<br />

que estaba <strong>de</strong>spués <strong>de</strong>l último<br />

commit().<br />

1.4.3. Secuencias<br />

PEAR::DB incorpora un mecanismo propio <strong>de</strong> secuencias<br />

(AUTO_INCREMENT en MySQL), que es in<strong>de</strong>pendiente <strong>de</strong> la base <strong>de</strong> <strong>datos</strong><br />

utilizada y que pue<strong>de</strong> ser <strong>de</strong> gran utilidad en i<strong>de</strong>ntificadores, claves primarias,<br />

etc. El único requisito es que se usen sus métodos <strong>de</strong> trabajo con secuencias,<br />

siempre que se esté trabajando con esa base <strong>de</strong> <strong>datos</strong>; es <strong>de</strong>cir, no se <strong>de</strong>be crear<br />

la secuencia en el SGBD y, <strong>de</strong>spués, trabajar con ella con los métodos que ofrece<br />

PEAR::DB. Si la secuencia la creamos mediante la base <strong>de</strong> <strong>datos</strong>, entonces<br />

<strong>de</strong>beremos trabajar con ella con las funciones extendidas <strong>de</strong> SQL que nos proporcione<br />

ese SGBD (en PostgreSQL la función nextval() o en MySQL la inserción<br />

<strong>de</strong>l valor 0 en un campo AUTO_INCREMENT).

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!