PHP 8.5.2 Released!

Pdo\Pgsql::getNotify

(PHP 8 >= 8.4.0)

Pdo\Pgsql::getNotifyПолучает асинхронное уведомление

Описание

public Pdo\Pgsql::getNotify(int $fetchMode = PDO::FETCH_DEFAULT, int $timeoutMilliseconds = 0): array|false

Возвращает набор результатов, представляющий ожидающее асинхронное уведомление.

Список параметров

fetchMode

Формат, в котором должен быть возвращён набор результатов, одна из следующих констант:

timeoutMilliseconds
Длительность ожидания ответа, в миллисекундах.

Возвращаемые значения

Если одно или несколько уведомлений находятся на рассмотрении, возвращает одну строку с полями message и pid, в противном случае возвращает значение false.

Ошибки

Если значение параметра fetchMode не является одной из допустимых констант PDO::FETCH_*, выбрасывается ошибка ValueError.

Если значение параметра timeoutMilliseconds меньше 0, выбрасывается ошибка ValueError.

Если значение параметра timeoutMilliseconds больше значения, которое может содержаться в 32-битном целом числе со знаком, выбрасывается ошибка уровня E_WARNING, а значением параметра будет максимальное значение 32-битного целого числа со знаком.

Смотрите также

  • PDO::query() - Подготавливает и выполняет выражение SQL без заполнителей
  • PDOStatement::fetch() - Извлекает следующую строку из результирующего набора
  • PDOStatement::fetchAll() - Выбирает строки, которые остались в наборе результатов
Добавить

Примечания пользователей 1 note

up
0
sage at sage dot sk
10 days ago
This page needs an example to understand that you **need** to explicitly call LISTEN before using getNotify, like shown in https://www.php.net/manual/en/function.pg-get-notify.php

<?php

$db = new PDO($dsn, $user, $password, $options);
$db->query('LISTEN test');
$notification = $db->pgsqlGetNotify(PDO::FETCH_ASSOC, 10000);

// or

$db = new Pdo\Pgsql($dsn, $user, $password, $options);
$db->query('LISTEN test');
$notification = $db->getNotify(PDO::FETCH_ASSOC, 10000);

// now you can call NOTIFY elsewhere
// PG> NOTIFY test, 'payload string';
var_dump($notification);

?>

array(3) {
  ["message"]=>
  string(4) "test"
  ["pid"]=>
  int(123565)
  ["payload"]=>
  string(14) "payload string"
}

If you called NOTIFY before calling LISTEN, nothing will be returned!

You receive the first notification only, and you have to call getNotify again. And call LISTEN again if DB connection drops.
To Top