PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

pg_set_client_encoding> <pg_send_query_params
Last updated: Fri, 27 Jun 2008

view this page in

pg_send_query

(PHP 4 >= 4.2.0, PHP 5)

pg_send_query — Wysyła zapytanie asynchroniczne

Opis

bool pg_send_query ( resource $identyfikator_połączenia , string $zapytanie )

pg_send_query() wysyła asynchroniczne zapytanie lub zapytania do połączenia określonego przez identyfikator_połączenia . W przeciwieństwie do pg_query(), pozwala wysłać jednorazowo wiele zapytań do PostgreSQL-a, na następnie pobrać wyniki jeden po drugim używając funkcji pg_get_result().

Wykonywanie skryptu nie jest blokowane w czasie wykonywania zapytań. Możesz użyć pg_connection_busy() aby sprawdzić czy połączenie jest nie jest zajęte (np. wykonuje się inne zapytanie). Zapytania mogą zostać przerwane przez użycie funkcji pg_cancel_query().

Tak więc użytkownik może wysłać wiele zapytań jednocześnie, ale nie może ich wysyłać jeśli połączenie jest zajęte. Jeśli zapytanie będzie wysłane gdy połączenie jest zajęte, będzie oczekiwało aż wykona się poprzednie zapytanie i utracone zostaną wszystkie wyniki.

Parametry

identyfikator_połączenia

Identyfikator połączenia do bazy PostgreSQL.

zapytanie

Instrukcja lub instrukcje SQL do wykonania.

Zwracane wartości

Zwraca TRUE w przypadku powodzenia, FALSE w przypadku błędu.

Użyj pg_get_result(), aby ustalić wynik zapytania.

Przykłady

Example #1 pg_send_query() - przykład

<?php
  $polaczenie_z_baza 
pg_connect("dbname=wydawca") or die("Nie można było się połączyć");

  if (!
pg_connection_busy($polaczenie_z_baza)) {
      
pg_send_query($polaczenie_z_baza"select * from autorzy; select count(*) from autorzy;");
  }
  
  
$wynik1 pg_get_result($polaczenie_z_baza);
  echo 
"Pierwsze wywołanie pg_get_result(): $wynik1\n";
  
$wiersze1 pg_num_rows($wynik1);
  echo 
"$wynik1 ma $wiersze1 wpisów\n\n";
  
  
$wynik2 pg_get_result($polaczenie_z_baza);
  echo 
"Drugie wywołanie pg_get_result(): $wynik2\n";
  
$wiersze2 pg_num_rows($wynik2);
  echo 
"$wynik2 ma $wiersze2 wpisów\n";
?>

Powyższy przykład wyświetli:

Pierwsze wywołanie pg_get_result(): Resource id #3
Resource id #3 ma 8 wpisów

Drugie wywołanie pg_get_result(): Resource id #4
Resource id #4 ma 5 wpisów



pg_set_client_encoding> <pg_send_query_params
Last updated: Fri, 27 Jun 2008
 
add a note add a note User Contributed Notes
pg_send_query
vincentdephily
29-Nov-2005 02:25
Note that if you send a query without calling pg_get_result() for the previous one (supposing it has finished and the connection is not busy), the previous query will get discarded.

See for yourself (tested on php4.4.0, postgres8.0.4, Linux/FreeBSD) :
<?
$conn
= pg_connect("dbname=template1 host=localhost user=pgsql");
if (
$conn === FALSE)
  exit(
"Can't connect to db");

$q = array();
// send some queries
foreach (range(0, 500) as $i)
 
stack_query($q, $conn, "SELECT 'query $i' AS str;");
// receive them
while (true)
  {
   
$left = stack_query($q, $conn);
    echo
"$left left... ";
   
$result = pg_get_result($conn);
    if (
$left == 0 && $result === FALSE)
      break;
   
$row = pg_fetch_assoc($result);
   
// depending on race conditions, you wont get all your original queries here.
   
echo "got $row[str]\n";
  }

function
stack_query(&$queries, $conn, $sql = FALSE)
{
  if (
$sql !== FALSE)
   
$queries[] = $sql;
  while (
count($queries) && !pg_connection_busy($conn))
   
pg_send_query($conn, array_shift($queries));
  return
count($queries) + (pg_connection_busy($conn) ? 1 : 0);
}
?>

You will have to write a higher level of abstraction if you want a "send all queries now, receive them later" behaviour.
Likeyouover others at hotmail dot com
02-Sep-2003 11:29
<?php
// --------- OPEN CONN ---

  
$conn = pg_connect("host='127.0.0.1' dbname='test' user='usertest' password='passtest'");

// --------- OPEN FILE ---

  
$fp = fopen('logo.gif', "r");
  
$buffer = fread($fp, filesize('logo.gif'));
  
fclose($fp);

// --------- CREATE - INSERT OID ---

  
pg_exec($conn, "begin");

  
$oid = pg_locreate($conn);

  
$rs = pg_exec($conn,"INSERT INTO test(tipo, images) VALUES('A1', $oid);");
  
$handle = pg_loopen ($conn, $oid, "w");

  
pg_lowrite ($handle, $buffer);
  
pg_loclose ($handle);

  
pg_exec($conn, "commit");

// --------- OPEN - INSERT OID ---

  
$rs = pg_exec($conn, "SELECT images FROM test WHERE tipo = 'A1';");
  
$row = pg_fetch_row($rs, 0);

  
pg_exec($conn, "begin");
  
$loid = pg_loopen($conn, $row[0], "r");

  
header("Content-type: image/gif");

  
pg_loreadall($loid);
  
pg_loclose($loid);

  
pg_exec ($conn, "commit");

// --------- UNLINK OID ---

  
pg_exec($conn, "begin");

  
$loid = $row[0];
  
pg_lounlink($conn, $loid);

  
pg_exec ($conn, "commit");

// --------- DELETE OID ---

  
pg_exec($conn, "DELETE FROM test WHERE tipo = 'A1';");

// --------- CLOSE CONN ---

  
pg_close();
?>
Mikewithme at yahoo dot com
02-Sep-2003 11:28
Due to a bug, OLD API does not available with PHP 4.2.0 and 4.2.1.

PHP 4.2.2 will support OLD API again and will be kept long enough.

New API will be available PHP 4.2.0 to later versions.
yohgaki at php dot net
19-Jun-2002 04:00
Due to a bug, PHP 4.2.0 and 4.2.1 does not support pg_lo_import() old API. It's fixed in PHP 4.2.2.

BTW, new API will be always available from PHP 4.2.0 to later versions. Older API will be kept long enough, also.
ceco at noxis dot net
15-May-2002 09:08
it works for me (php-4.2.1)

not like this

int pg_lo_import ( string pathname [, resource connection])

but
int pg_lo_import ( resource connection, string pathname )

don't know the reason
Ron Howard
05-Jan-2003 04:20
If there is an error in one of your queries, the queries following it will not get executed, and there will *not* be an error message displayed. The only way I can think of to determine if an SQL error happened is to use pg_trace.

Example:

pg_send_query($connection,
    "SELECT id FROM users;
    SELECT * FROM customers;
     [INVALID-SQL-STATEMENT];
    SELECT name FROM countries;");

while ($result = pg_get_result($connection))
    $results[] = $result;

The $results array will only have two items in it.

pg_set_client_encoding> <pg_send_query_params
Last updated: Fri, 27 Jun 2008
 
 
show source | credits | sitemap | contact | advertising | mirror sites