pg_get_result

(PHP 4 >= 4.2.0, PHP 5, PHP 7)

pg_get_result Получение результата асинхронного запроса

Описание

resource pg_get_result ([ resource $connection ] )

pg_get_result() получает ресурс результата асинхронного запроса, запущенного функциями pg_send_query(), pg_send_query_params() или pg_send_execute().

pg_send_query() и другие функции, посылающие асинхронные запросы, может посылать сразу несколько запросов на сервер. Функция pg_get_result() получит результаты всех запросов по очереди.

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

connection

Ресурс соединения с базой данных PostgreSQL.

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

Ресурс результата запроса, либо FALSE, когда доступных результатов больше нет.

Примеры

Пример #1 Пример использования pg_get_result()

<?php
  $dbconn 
pg_connect("dbname=publisher") or die("Невозможно соединиться с сервером");

  if (!
pg_connection_busy($dbconn)) {
      
pg_send_query($dbconn"select * from authors; select count(*) from authors;");
  }
  
  
$res1 pg_get_result($dbconn);
  echo 
"Первый вызов pg_get_result(): $res1\n";
  
$rows1 pg_num_rows($res1);
  echo 
"$res1 имеет $rows1 записей\n\n";
  
  
$res2 pg_get_result($dbconn);
  echo 
"Второй вызов pg_get_result(): $res2\n";
  
$rows2 pg_num_rows($res2);
  echo 
"$res2 имеет $rows2 записей\n";
?>

Результат выполнения данного примера:

Первый вызов pg_get_result(): Resource id #3
Resource id #3 имеет 3 записей

Второй вызов pg_get_result(): Resource id #4
Resource id #4 имеет 1 записей

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

  • pg_send_query() - Отправляет асинхронный запрос

Коментарии

There is no way to poll/wait for a notification to come in. You either have to enter a busy loop or sleep. Both options are horrible. It would be nice for PHP to provide access to PQsocket so one could select() on the socket connection. This is how it's done from C or Perl.
2005-01-27 17:03:47
http://php5.kiev.ua/manual/ru/function.pg-get-result.html
Автор:
william at 25thandClement dot com said: "There is no way to poll/wait for a notification to come in. .."
Yes, there is. If there is a query in progress, pg_get_result() will block and return the result of that query when it's complete.
2008-10-25 20:14:16
http://php5.kiev.ua/manual/ru/function.pg-get-result.html
To have a a simple wait output with async queries you can use the pg_connection_busy command:

<?php
$dbh 
pg_connect("host=XXX user=XXX password=XXX dbname=XXX");
if (!
$dbh)
{
    print 
"Failed to connect";
    exit;
}

$query "SELECT pg_sleep(10)";
if (!
pg_connection_busy($dbh))
{
   
$sent pg_send_query($dbh$query);
    print 
"Sent query, waiting: ";
    while (
pg_connection_busy($dbh)
    {
        print 
".";
       
flush();
    }
   
$res pg_get_result($dbh);
    print 
"<br>"// or \n
   
print "Result is: $res";
}

pg_close($dbh);
?>
2013-10-10 09:28:37
http://php5.kiev.ua/manual/ru/function.pg-get-result.html
Автор:
It might seem that after calling pg_get_result() upon sending just a single query, the connection will not be busy. The correct way is, though, to call extra pg_get_result() in a loop until it returns false [1].

<?php
$conn 
pg_connect('...'PGSQL_CONNECT_FORCE_NEW);
for (
$i 0$i 10000$i++) {
   
$query 'erroneous query';
    if (
pg_connection_busy($conn)) {
       
fprintf(STDERR"Connection is busy\n");
        exit(
1);
    }
   
pg_send_query($conn$query);
   
$res pg_get_result($conn);
    if (
$res === false) {
       
fprintf(STDERR"A result was expected\n");
        exit(
1);
    }

   
/* The following does not seem necessary for good queries, but is vital for erroneous queries.
       Commenting the loop out leads to this script fail with the "Connection is busy" error. */
   
while (pg_get_result($conn));

   
// result processing...
}
?>

See http://www.postgresql.org/message-id/flat/gtitqq$26l3$1@news.hub.org#gtitqq$26l3$1@news.hub.org and https://bugs.php.net/bug.php?id=52750 for detailed information.

[1] Or, even better, use an asynchronous connection since PHP 5.6.
2015-09-15 01:04:51
http://php5.kiev.ua/manual/ru/function.pg-get-result.html

    Поддержать сайт на родительском проекте КГБ