william at 25thandClement dot com said: "There is no way to poll/wait for a notification to come in. .."
Yes, there is. If there is a query in progress, pg_get_result() will block and return the result of that query when it's complete.
pg_get_result
(PHP 4 >= 4.2.0, PHP 5)
pg_get_result — Gibt asynchrone Abfrageergebnisse zurück
Beschreibung
resource pg_get_result
([ resource $connection
] )
pg_get_result() gibt die Ergebniskennung einer asynchronen Abfrage zurück, die mit pg_send_query(), pg_send_query_params() oder pg_send_execute() an den Datenbankserver gesendet wurde.
Mit pg_send_query() und auch den anderen asynchronen Abfragefunktionen können mehrere Abfragen an den Server geschickt werden. Deren Ergebnisse können mit pg_get_result() nacheinander abgefragt werden.
Parameter-Liste
- connection
-
PostgreSQL Verbindungskennung.
Rückgabewerte
Die Ergebniskennung als resource or FALSE, falls es keine Ergebnisse gibt.
Beispiele
Beispiel #1 pg_get_result() Beispiel
<?php
$dbconn = pg_connect("dbname=publisher") or die("Verbindungsaufbau fehlgeschlagen");
if (!pg_connection_busy($dbconn)) {
pg_send_query($dbconn, "select * from authors; select count(*) from authors;");
}
$res1 = pg_get_result($dbconn);
echo "Der erste Aufruf von pg_get_result(): $res1\n";
$rows1 = pg_num_rows($res1);
echo "$res1 hat $rows1 Zeilen\n\n";
$res2 = pg_get_result($dbconn);
echo "Der zweite Aufruf von pg_get_result(): $res2\n";
$rows2 = pg_num_rows($res2);
echo "$res2 hat $rows2 Zeilen\n";
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Der erste Aufruf von pg_get_result(): Resource id #3 Resource id #3 hat 3 Zeilen Der zweite Aufruf von pg_get_result(): Resource id #4 Resource id #4 hat 1 Zeilen
pg_get_result
Marko Tiikkaja
26-Oct-2008 12:14
26-Oct-2008 12:14
william at 25thandClement dot com
27-Jan-2005 11:03
27-Jan-2005 11:03
There is no way to poll/wait for a notification to come in. You either have to enter a busy loop or sleep. Both options are horrible. It would be nice for PHP to provide access to PQsocket so one could select() on the socket connection. This is how it's done from C or Perl.
