php saklanan bir postgres işlevi çağırmadan

1 Cevap php

Ben aslında burada soru haberi: http://stackoverflow.com/questions/2536727/calling-a-stored-postgres-function-from-php

Ben cevabı kabul, ama, aslında benim için çalışmıyor ... İşte orijinal soru:

Ben Postgres bir işlevi var, ve ben pg isteminde olduğum zaman, ben sadece yaptığım:

SELECT zp('zc',10,20,90);
FETCH ALL FROM zc;

Ben php bu nasıl merak ediyorum?

Ben sadece yapabileceğini düşündüm:

$q = pg_query("SELECT zp('zc',10,20,90)");

Ama, nasıl ben bu sorgudan "fetch" mı?

Ben hala bunu nasıl tamamen emin değilim ...

Denedim

$q = pg_query("SELECT zp('zc',10,20,90)");
$f = pg_query("FETCH ALL FROM zc");
while($row = pg_fetch_array($f)) ... 

ve

while($row = pg_fetch_all($f)) ...

ve

$q = pg_query("SELECT zp('zc',10,20,90);FETCH ALL FROM zc;")
while($frow = pg_fetch_array($q)) ... 

1 Cevap

Bu çalışır:

Bir imleç döndüren bir işlev oluşturun:

CREATE FUNCTION myfunc(refcursor) RETURNS SETOF refcursor AS $$
BEGIN
    OPEN $1 FOR SELECT * FROM tbl_name;
    RETURN NEXT $1;
END;
$$ LANGUAGE plpgsql;

Ve PHP-kod daha:

<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
$con = pg_connect('host=localhost port=5432 user=**** password=**** dbname=****');

pg_query($con, "BEGIN;");
pg_query($con, "SELECT * FROM myfunc('a');");

$result = pg_query($con, "FETCH ALL FROM a;");

echo '<pre>';
print_r(pg_fetch_all($result));
echo '</pre>';

pg_query($con, "COMMIT;");
?>

Eğer herhangi bir sorun varsa, ne gibi sorunlar var? Herhangi bir hata?