lunes, 31 de octubre de 2011

Pasar arreglo de un archivo a otro de PHP con GET

Hola a todos. El día de hoy les traigo un "truco" que recientemente usé en una página web que hice para la universidad.

Es posible que tengamos la necesidad de pasar un arreglo completo de un archivo a otro de PHP y resulta muy incómodo pasar cada uno de sus componentes. Para esto, lo que haremos será serializar el arreglo con la función serialize de PHP, y la cadena resultante la codificaremos con urlencode para ser pasada a otro archivo. En el otro archivo solo tendremos que decodificar la cadena con la función urldecode y deserializarla con unserialize.

Archivo emisor:
arr['ind'] = 4;

$val = urlencode(serialize(arr));

header('Location: recptor.php?s=$var');


Archivo receptor:
$s = unserialize(urldecode(stripslashes($_GET['s'])));
echo $s['ind'];


Así el echo de la última linea nos mostrará "4".

viernes, 28 de octubre de 2011

Obtener ID luego de insertar un registro en SQL

Supongamos que tenemos la siguiente tabla en nuestra base de datos:

tabla
idEntero autoincrementable
campo1varchar(10)
campo2varchar(30)
campo3varchar(30)


El problema ocurre cuando hacemos una inserción en la base de datos y necesitamos saber cual fue el id con el que quedó nuestro registro.

La solución a este problema llega a nosotros gracias a la clausula RETURNING. Miremos como sería nuestra consulta:

INSERT INTO tabla (campo1, campo2, campo3) VALUES ('c1', 'c2', 'c3') RETURNING id;

La anterior consulta inserta el registro en la tabla tabla y retorna el id con el que queda este. Ahora si nuestra intensión es guardar este valor en una variable dentro de una función SQL podemos hacerlo así:


CREATE FUNCTION funcion (VARCHAR, VARCHAR, VARCHAR) RETURN INTEGER
AS$$
DECLARE
id_t INTEGER;
BEGIN
INSERT INTO tabla (campo1, campo2, campo3) VALUES ($1, $2, $3)
RETURNING id INTO id_t;
RETURN id_t;
END;
$$LANGUAGE plpgsql;

Función hecha en PostgreSQL


La clausula "RETURINIG id INTO id_t" podemos usarlo independiente del gestor de bases de datos que estemos usando.