PHP 8.0.24 Released!

pg_get_notify

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

pg_get_notifyGets SQL NOTIFY message

Açıklama

pg_get_notify(PgSql\Connection $connection, int $mode = PGSQL_ASSOC): array|false

pg_get_notify() gets notifications generated by a NOTIFY SQL command. To receive notifications, the LISTEN SQL command must be issued.

Değiştirgeler

connection

PostgreSQL veritabanı bağlantısı özkaynağı.

mode

Dizinin nasıl indisleneceğini belirleyen seçimlik değiştirge. kip bir sabit olup şu değerleri alabilir: PGSQL_ASSOC, PGSQL_NUM ve PGSQL_BOTH. PGSQL_NUM ile işlev sayısal indisli bir dizi, PGSQL_ASSOC ile ilişkisel bir dizi ve PGSQL_BOTH ile hem sayısal hem de ilişkisel indisli bir dizi döndürür.

Dönen Değerler

An array containing the NOTIFY message name and backend PID. If supported by the server, the array also contains the server version and the payload. Otherwise if no NOTIFY is waiting, then false is returned.

Sürüm Bilgisi

Sürüm: Açıklama
8.1.0 bağlantı değiştirgesi artık PgSql\Connection nesnesi kabul ediyor, evvelce bir özkaynak kabul ederdi.

Örnekler

Örnek 1 PostgreSQL NOTIFY message

<?php 
$conn 
pg_pconnect("dbname=publisher");
if (!
$conn) {
  echo 
"An error occurred.\n";
  exit;
}

// Listen 'author_updated' message from other processes
pg_query($conn'LISTEN author_updated;');
$notify pg_get_notify($conn);
if (!
$notify) {
  echo 
"No messages\n";
} else {
  
print_r($notify);
}
?>

Ayrıca Bakınız

add a note

User Contributed Notes 2 notes

up
6
glococo at gmail dot com
5 years ago
Instant yet Simple PHP notification with HTML5 Server-Sent Events

sse.php
<?php
$dbconn
= new PDO("pgsql:host=localhost;dbname=mydb", "pduser", "userpass");
$dbconn->exec('LISTEN "channel_name"');   // those doublequotes are very important

header("X-Accel-Buffering: no"); // disable ngnix webServer buffering
header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
ob_end_flush();  // close PHP output buffering
$inc=0;

while (
1) {
 
$result = "";
 
// wait for one Notify 10seconds instead of using sleep(10)
 
$result = $dbconn->pgsqlGetNotify(PDO::FETCH_ASSOC, 10000);

  if (
$result ) {
        echo
"id: $inc\ndata: ".stripslashes(json_encode($result))."\n\n";
       
$inc++;
  }

 
flush();
}
?>

Tested with HTML+JS sample file from Mozilla web site (ssedemo.php)
up
0
david at frankieandshadow dot com
1 year ago
It appears that pg_get_notify does not distinguish between no message waiting and a failure when checking - both seem to return FALSE.

I had to add a pg_check_connection(...) before pg_get_notify to check the connection is still alive (it's quite likely to be a long-standing connection with pg_get_notify as you'll be polling waiting for something to happen). In my case the remote database server had a hiccup, and without pg_check_connection the listeners failed to notice, so never saw later notifications.
To Top