(PHP 8 >= 8.4.0)
Pdo\Pgsql::getNotify — 非同期に通知を取得する
$fetchMode = PDO::FETCH_DEFAULT, int $timeoutMilliseconds = 0): array|false保留中の非同期な通知を示す結果セットを返します。
fetchMode結果セットを返すフォーマット。 次のいずれかの定数:
timeoutMilliseconds
通知が保留中だった場合は1行を返し、そうでなければ false を返します。
この行には、message フィールド(チャネル名)と
pid フィールド(通知を送信したバックエンドのプロセス ID)が含まれます。
通知が空でないペイロードを伴う場合は、この行に payload フィールドも含まれます。
PDO::FETCH_NUM の場合、これらのフィールドは
インデックス 0、1、2 にあります。
fetchMode が有効な
PDO::FETCH_*
定数のいずれでもない場合、ValueError がスローされます。
timeoutMilliseconds が0 未満の場合、
ValueError がスローされます。
timeoutMilliseconds が符号付き32ビットの整数に
収まらない場合、E_WARNING が発生し、
その値は符号付き32ビットの整数の最大値に丸められます。
例1 Pdo\Pgsql::getNotify() の例
LISTEN でチャネルを購読し、1秒のタイムアウトで
次の保留中の通知を読み取ります。
<?php
$db = new Pdo\Pgsql('pgsql:dbname=test host=localhost', $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->exec('LISTEN messages');
$db->exec("NOTIFY messages, 'hello'");
$notification = $db->getNotify(PDO::FETCH_ASSOC, 1000);
var_export($notification);
?>上の例の出力は、 たとえば以下のようになります。
array ( 'message' => 'messages', 'pid' => 1928, 'payload' => 'hello', )