Despabilando la MonoNeurona::Internet es de todos [Inicio] [Regresar]
WWW \ Tips de PEAR: CURRVAL, getOne y getRow
WWW
Tips de PEAR: CURRVAL, getOne y getRow

Este artículo ha sido consultado en 605 ocasiones.

Este es un anexo al Tutorial de PHP. Revíselo si no sabe como conectarse a PostgreSQL con PEAR.

Introducción

Muchas veces la lógica de la aplicación nos obliga a guardar un grupo de datos en dos tablas separadas y relacionadas por el ID de la primera tabla. Es decir, debemos insertar algunos datos en la tabla_uno e inmediatamente después insertar el resto de los datos en la tabla_dos con el ID de la primera tabla como "liga". Generalmente el ID proviene de una secuencia que inicializamos con el tipo "serial" cuando creamos la tabla. Por ejemplo:

CREATE TABLE residentes (
id serial,
nombre varchar(100),
email varchar(60),
fecha_venc date
);

Creará la secuencia residentes_id_seq. Si queremos insertar un registro y conocer el ID de este registro recientemente insertado, podemos usar la función getOne() de PEAR y el comando CURRVAL de PostgreSQL. getOne() se usa cuando sabemos que el query nos regresará un sólo valor. Note que el valor que nos regresa getOne() no es un array, sino una variable simple:

$sql="INSERT INTO residentes VALUES (NEXTVAL('residentes_id_seq'), 'Roberto Carmona', 'robert@gmail.com', '10-05-2008')";

$conn->query($sql); //insertamos

$query="SELECT CURRVAL('residentes_id_seq')";

$id = $conn->getOne($query); //El currval actual

Con esto ya tenemos el ID de la secuencia y podemos insertar en la segunda tabla. Fácil y divertido ¿no?


Recuperar un sólo registro

Generalmente en PEAR usamos la funcion query(), la cual nos regresa un objeto $result y a su vez debemos hacer un while->Array() con este objeto para pintar los registros de la tabla. Esto está bien para un "SELECT * FROM tabla", sin embargo, es un proceso muy ineficiente si lo que deseamos es ir por un registro único de la tabla, como sucede en:

$query="SELECT * FROM residentes WHER id = $_GET['id']";

En estos casos debemos usar la función getRow():

$Row =& $conn->getRow($query, array(), DB_FETCHMODE_ORDERED);

if (DB::isError($Row))
   die($Row->getMessage());

Note que ya no es necesario la variable intermediaria $result, en lugar de eso, getRow() nos regresa directamente un array único con los valores del registro. PEAR Rulezz!! ;-) .

Conclusión

No sólo son las clases, existen cientos de funciones avanzadas en PEAR que son subutilizadas por el eterno problema de PEAR: la falta de documentación. Sin embargo, vale la pena interesarse e investigar las librerías PEAR por el hecho de que es un proyecto resultado de las necesidades reales y reiterativas de los desarrolladores actuales. Si tiene una tarde libre, revise todo lo que PEAR tiene para usted. ¡Hasta el próximo Tip!


Autor
Manuel Montoya es psicólogo y vive en la Ciudad de México. Desde 1998 se dedica a la consultoría de sistemas abiertos. Ha desarrollado aplicaciones Web para American Express, Bancomext, Aeroméxico y Ford. Actualmente trabaja en el Instituto de Investigaciones Biomédicas de la UNAM usando Python, PostgreSQL y PHP sobre NetBSD, además prepara el café de las mañanas. Jedit.org y WindowMaker son su editor y escritorio favoritos.
Manuel Montoya

Última actualización: 2007-04-29 10:56:59-05



ir arriba
The Queen is here Mozilla Firefox The Best DataBase CakePHP Framework CSS GNU Hacker