Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/11/2009, 08:56
rProgged
 
Fecha de Ingreso: agosto-2004
Mensajes: 131
Antigüedad: 19 años, 8 meses
Puntos: 2
Respuesta: obtener datos de un store procedure(postgre) desde php

Hola,

Mira la verdad soy nuevo también en esto de usar PHP con Postgre y estoy igual que tu. En lo personal me ha gustado bastante sobre todo el pgsql. El tema es que la información que hay es bien poca y sobre todo en cuanto a SP.

Por ejemplo yo tengo el siguiente SP
Código:
CREATE OR REPLACE FUNCTION LoopTest() RETURNS SETOF tbl_usuario AS $$
DECLARE
	datos tbl_usuario%ROWTYPE;
BEGIN
	FOR datos IN
		SELECT us_id, per_us_id, us_rut, us_dv, us_nombre, us_email, us_region, us_comuna, us_username, us_password, us_activo
		FROM tbl_usuario
		WHERE us_activo='1'
	LOOP
		RETURN NEXT datos;
	END LOOP;
	RETURN;
END;
$$ LANGUAGE plpgsql VOLATILE
Y luego en PHP lo recupero así

Código:
$sql = "SELECT LoopTest()";
$result = pg_query($conn, $sql);
$filas = pg_num_rows($result);
if ($filas==0) {
	echo 'No existen usuarios';exit;
} else {
	for($cont=0;$cont<$filas;$cont++) {
		$campo = pg_result( $result, $cont, 0 );
		echo "$campo <br>";
	}
	pg_free_result($result);
}
El tema es que la salida de php es la siguiente:

Código:
(1,1,1111111,1,"Administrador Sistema",[email protected],RM,PRV,admin,admin,t)
(3,1,2222222,2,"Usuario Test",[email protected],RM,SBR,admin,admin,t)
Lo que me he fijado es que haga lo que haga y reciba de la forma que sea los datos en PHP siempre me devuelve una sola columna que contiene todos las columnas recogidas por el SP como una sola cadena de texto. O sea esto: (1,1,1111111,1,"Administrador Sistema",[email protected],RM,PRV,admin,admin,t)

Eso se puede comprobar al intentar hacer $campo = pg_result( $result, $cont, 1 );

Aunque en el SP tomes varias columnas PHP te reclama que la columna 1 no existe, y al tomar la columna 0 pues te da lo que escribí antes.

De momento se me está ocurriendo tomar los datos y trabajarlos como cadena, o sea hacer un explode de la cadena retornada y todo eso, seria una real lata pero no se me ocurre otra solución (seguramente debido a mi ignorancia en el tema)

¿¿¿Algún experto tendrá una forma correcta de trabajar con PHP y SP pgsql???

Saludos y gracias,

Rodrigo