Pdo\Pgsql::getNotify

(PHP 8 >= 8.4.0)

Pdo\Pgsql::getNotifyRecebe notificação assíncrona

Descrição

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

Retorna um conjunto de resultados que representa uma notificação assíncrona pendente.

Parâmetros

fetchMode

O formato como o conjunto de resultados deve ser retornado, uma das seguintes constantes:

timeoutMilliseconds
O tempo de espera por uma resposta, em milissegundos.

Valor Retornado

Se uma notificação estiver pendente, retorna uma única linha, caso contrário retorna false. Alinha tem um campo message (o nome do canal) e um campo pid (o ID do processo do backend que envia a notificação). Se a notificação traz uma carga não vazia, a linha também tem um campo payload. Com PDO::FETCH_NUM, estes campos estão nos índices 0, 1 e 2.

Erros/Exceções

Uma exceção ValueError será lançada se fetchMode não for uma das constantes PDO::FETCH_* válidas.

Uma exceção ValueError será lançada se timeoutMilliseconds for menor que 0.

Um E_WARNING é gerado quando timeoutMilliseconds é maior que o valor que pode estar contido em um inteiro com sinal de 32 bits; nesse caso, será o valor máximo de um inteiro com sinal de 32 bits.

Exemplos

Exemplo #1 Exemplo de Pdo\Pgsql::getNotify()

Inscreva em um canal com LISTEN e então leia a próxima notificação pendente com um tempo limite de um segundo.

<?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);
?>

O exemplo acima produzirá algo semelhante a:

array (
  'message' => 'messages',
  'pid' => 1928,
  'payload' => 'hello',
)

Veja Também