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.Pdo\Pgsql::getNotify
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Pdo\Pgsql::getNotify
Референца за `pdo-pgsql.getnotify.php` со подобрена типографија и навигација.
Pdo\Pgsql::getNotify
Класата Dom\DtdNamedNodeMap
Pdo\Pgsql::getNotify — Добијте асинхронизирано известување
= NULL
$fetchMode = PDO::FETCH_DEFAULT, int $timeoutMilliseconds = 0): array|falseВраќа множество резултати што претставуваат чекачко асинхронизирано известување.
Параметри
fetchMode-
Форматот во кој треба да се врати множеството резултати, една од следниве константи:
timeoutMilliseconds- Времетраењето на чекање за одговор, во милисекунди.
Вратени вредности
If a notification is pending, returns a single row, otherwise returns
false. The row has a message field (the channel name) and a pid field (the process ID of the notifying backend). If the notification carries a non-empty payload, the row also has a
payload field. With PDO::FETCH_NUM, these fields are at indexes 0, 1Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во
2.
Errors/Exceptions
А ValueError се фрла ако
fetchMode не е една од валидните
PDO::FETCH_*
constants.
А ValueError се фрла ако
timeoutMilliseconds е помала од 0.
А E_WARNING се покренува кога
timeoutMilliseconds е поголема од вредноста што може да се содржи во потпишан 32-битен цел број, во кој случај ќе биде максималната вредност на потпишан 32-битен цел број.
Примери
Пример #1 PDO::pgsqlGetNotify() example
Subscribe to a channel with LISTEN, then read the next pending notification with a one-second timeout.
<?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', )
Види Исто така
- Испрати MySQL барање - Подготвува и извршува SQL изјава без места за замена
- Ги контролира содржините на вратениот низ како што е документирано во - Зема го следниот ред од множеството резултати
- . Враќа резултати од повикување на назначената функција, користејќи ги колоните на секој ред како параметри во повикот. - Вчитува преостанати редови од сет на резултати