Me gustaria saber como puedo llamar una funcion o procedimiento almacenado en postgresql mediante PHP con PDO. Supongamos que tengo la funcion en postgresql:
buscarporcategoria(categoria character varying);
Y su contenido es el siguiente:
CREATE OR REPLACE FUNCTION public.buscarporcategoria( _categoria_ character varying) RETURNS TABLE(isbn character varying, titulo character varying, edicion integer, paginas integer, fecha date, nombre character varying, apellido character varying, categoria character varying, editorial character varying) LANGUAGE 'plpgsql' COST 100 VOLATILE ROWS 1000 AS $ BODY$ BEGIN FOR nombre, apellido, isbn, titulo, edicion, paginas, fecha, categoria, editorial IN SELECT autores.nombre, autores.apellido, libros.isbn, libros.titulo, libros.edicion, libros.paginas, libros.fecha_publicacion, categorias.categoria, editoriales.editorial FROM autores INNER JOIN libros_por_autor ON autores.id = libros_por_autor.id_autores INNER JOIN libros ON libros.id = libros_por_autor.id_libros INNER JOIN libros_por_categoria ON libros_por_categoria.id_libros = libros.id INNER JOIN categorias ON categorias.id = libros_por_categoria.id_categorias INNER JOIN libros_por_editorial ON libros_por_editorial.id_libros = libros.id INNER JOIN editoriales ON editoriales.id = libros_por_editorial.id_editoriales WHERE categorias.categoria ILIKE '%'||_categoria_||'%' LOOP RETURN NEXT; END LOOP; RETURN; END;
La consulta dentro del gestor funciona correctamente y devuelve lo que necesito, pero la estoy tratando de ejecutar así desde PHP con PDO y creo que no esta bien hacerlo así pues parece que se ejecuta correctamente, pero la verdad no devuelve nada:
$ query = $ this->con->prepare('SELECT * FROM buscarporcategoria(?)'); $ query->bindParam(1, $ this->autor, PDO::PARAM_STR); $ query->execute(); $ this->con->close(); return $ query->fetch(PDO::FETCH_OBJ);
Me gustaria saber como seria la forma correcta de ejecutar funciones de postgresql y obtener los resultados como si la ejecutara desde el mismo gestor.
A proposito, asi es como imprimo los resultados de la consulta:
foreach( $ libros as $ libro ){ echo '<tr> <td>'.$ libro->isbn.'</td> <td>'.$ libro->titulo.'</td> <td>'.$ libro->edicion.'</td> <td>'.$ libro->paginas.'</td> <td>'.$ libro->fecha.'</td> <td>'.$ libro->nombre.'</td> <td>'.$ libro->apellido.'</td> <td>'.$ libro->categoria.'</td> <td>'.$ libro->editorial.'</td> </tr>'; }