Pdo\Pgsql::getNotify
非同期に通知を取得する
説明
public arrayfalse Pdo\Pgsql::getNotify(int $fetchMode = PDO::FETCH_DEFAULT, int $timeoutMilliseconds = 0)
保留中の非同期な通知を示す結果セットを返します。
パラメータ
-
fetchMode
-
結果セットを返すフォーマット。
次のいずれかの定数:
PDO::FETCH_DEFAULT
PDO::FETCH_BOTH
PDO::FETCH_ASSOC
PDO::FETCH_NUM
-
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',
)
参考
- PDO::query
- PDOStatement::fetch
- PDOStatement::fetchAll