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

search for in the

pg_result_error_field> <pg_query_params
[edit] Last updated: Fri, 11 May 2012

view this page in

pg_query

(PHP 4 >= 4.2.0, PHP 5)

pg_queryВыполняет запрос

Описание

resource pg_query ([ resource $connection ], string $query )

pg_query() выполняет запрос query в заданной БД connection.

В случае ошибка функция возвращает FALSE, детали ошибки можно получить с помощью функции pg_last_error() если соединение с БД не нарушено.

Замечание: Несмотря на то, что параметр connection может быть опущен, делать так не рекомендуется, так как это может привести к трудно находимым ошибкам в скриптах.

Замечание:

Ранее данная функция называлась pg_exec(). pg_exec() все еще доступна в целях обеспечения совместимости, но лучше использовать новое имя.

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

connection

Ресурс соединения с БД PostgreSQL. Если не передать параметр connection используется соединение по умолчанию. Соединение по умолчанию -- это последнее соединение, созданное функцией pg_connect() или pg_pconnect().

query

Выражение или выражения SQL для выполнения. Если передано несколько выражений они автоматически выполняются как одна транзакция если явно не указаны команды BEGIN/COMMIT внутри выражения. Тем не менее, использовать несколько транзакий в одном вызове функции не рекомендуется.

Данные внутри запроса должны быть хорошо экранированы.

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

Ресурс результата запроса в случае успеха или FALSE в случае возникновения ошибки.

Примеры

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

<?php

$conn 
pg_pconnect("dbname=publisher");
if (!
$conn) {
  echo 
"Произошла ошибка.\n";
  exit;
}

$result pg_query($conn"SELECT author, email FROM authors");
if (!
$result) {
  echo 
"Произошла ошибка.\n";
  exit;
}

while (
$row pg_fetch_row($result)) {
  echo 
"Автор: $row[0]  E-mail: $row[1]";
  echo 
"<br />\n";
}
 
?>

Пример #2 Использование нескольких выражений в pg_query()

<?php

$conn 
pg_pconnect("dbname=publisher");

// эти выражения будут исполнены в одной транзакции

$query "UPDATE authors SET author=UPPER(author) WHERE id=1;";
$query .= "UPDATE authors SET author=LOWER(author) WHERE id=2;";
$query .= "UPDATE authors SET author=NULL WHERE id=3;";

pg_query($conn$query);

?>

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

  • pg_connect() - Открывает соединение с базой данных PostgreSQL
  • pg_pconnect() - Открывает постоянное соединение с сервером PostgreSQL
  • pg_fetch_array() - Возвращает строку результата в виде массива
  • pg_fetch_object() - Выбирает строку результата запроса и возвращает данные в виде объекта
  • pg_num_rows() - Возвращает количество строк в выборке
  • pg_affected_rows() - Возвращает количество затронутых запросом записей (кортежей)



pg_result_error_field> <pg_query_params
[edit] Last updated: Fri, 11 May 2012
 
add a note add a note User Contributed Notes pg_query
MomAlwaysLikedMeBest at hotmail 26-Apr-2011 11:42
Transactions can be accomplished using the following syntax:

<?php
pg_query
($db, "BEGIN WORK");

// Some insert/update/delete queries.
$res=pg_query($db, "INSERT INTO customers (customer_id) VALUES ('$customer_id')");

// Verify and end the transaction as appropriate.
if (!$res) {
   
pg_query($db, "ROLLBACK");
} else {
   
pg_query($db, "COMMIT");
}
?>
sd at dicksonlife dot com 14-Sep-2006 12:40
Took me a while to track this down so I thought it might be useful for others:

If you use stored procedures and need to get result sets back from them:

function dbquery($link,$query){
  pg_query($link,"BEGIN;");
  $tr=pg_query($link,$query);
  $r=pg_fetch_row($tr);
  $name=$r[0];
  $rs=pg_query($link,"FETCH ALL IN \"" . $name . "\";");
  pg_query($link,"END;");
  return $rs;
}

(Error checking removed for clarity)
zoli at makettinfo.hu 21-May-2006 08:07
It would be better this way:

<?php
  $result
=pg_query($conn, "SELECT COUNT(*) AS rows FROM x WHERE a=b;");
  if  (!
$result) {
   echo
"query did not execute";
  }
  if (
$line = pg_fetch_assoc($result)) {
    if (
$line['rows'] == 0) {
     echo
"0 records"
   
}
  }
  else {
   while (
$row = pg_fetch_array($result)) {
    
//do stuff with $row
  
}
  }
?>

This solution doesn't raise the load of the system with the move of matching rows (perhaps 0,1, perhaps 100, 1000, ... rows)
mankyd 13-May-2006 07:21
There was a typo in the code that I posted:

<?php
  $result
=pg_query($conn, "SELECT * FROM x WHERE a=b;");
  if  (!
$result) {
   echo
"query did not execute";
  }
  if (
pg_num_rows($result) == 0) {
   echo
"0 records"
 
}
  else {
   while (
$row = pg_fetch_array($result)) {
    
//do stuff with $row
  
}
  }
?>
mankyd 12-May-2006 06:56
Improving upon what jsuzuki said:

It's probably better to use pg_num_rows() to see if no rows were returned, as that leaves the resultset cursor pointed to the first row so you can use it in a loop.

Example:

<?php
  $result
=pg_query($conn, "SELECT * FROM x WHERE a=b;");
  if  (!
$result) {
   echo
"query did not execute";
  }
  if (
pg_num_rows($result) == 0) {
   echo
"0 records"
 
}
  else {
    while (
$row = pg_fetch_array($result) {
     
//do stuff with $row
   
}
  }
?>

I, personally, also find it more readable.
jsuzuki at spamcop dot net 27-Nov-2005 05:58
expanding on the note left by "cmoore" -

To check to see if the recordset returned no records,

<?php
  $result
=pg_query($conn, "SELECT * FROM x WHERE a=b;");
  if  (!
$result) {
    echo
"query did not execute";
  }
 
$rs = pg_fetch_assoc($result);
  if (!
$rs) {
    echo
"0 records"
 
}
?>

-jack
Jan-Willem Regeer 27-Sep-2005 04:58
In reply to david dot bouriaud at ac-rouen dot fr:

All it is doing is internal caching. How can that be dangerous. If you are going to be deleting records after you have closed the connection it is your problem to make sure you have the latest and greatest records, and not some cached ones. Considering you are writing the script I don't see why it is a problem, you know what you are doing in the script, so it is quite useless for PHP to invalidate the cache, when that could be done upon exiting the script, which would mean there was less time spent cleaning out the cache when it counts most (when returning data to the user).
cmoore 05-Sep-2005 11:20
One thing to note that wasn't obvious to me at first.  If your query returns zero rows, that is not a "failed" query.  So the following is wrong:
  $result=pg_query($conn, "SELECT * FROM x WHERE a=b;");
  if  (!$result) {
    echo "No a=b in x\n";
  }

pg_query returns FALSE if the query can not be executed for some reason.  If the query is executed but returns zero rows then you get back a resul with no rows.
Akbar 01-Dec-2004 08:07
Use pg_query to call your stored procedures, and use pg_fetch_result when getting a value (like a smallint as in this example) returned by your stored procedure.

<?php
$pgConnection
= pg_connect("dbname=users user=me");

$userNameToCheckFor = "metal";

$result = pg_query($pgConnection, "SELECT howManyUsersHaveThisName('$userNameToCheckFor')");

$count = pg_fetch_result($result, 0, 'howManyUsersHaveThisName');
?>
yoshinariatsuo at yahoo dot com 22-Apr-2003 11:59
create table from pg_query results.. hope it helps newbies...
function table_create($result)
{
    $numrows = pg_num_rows($result);
    $fnum = pg_num_fields($result);

    echo "<table border width='100%'>";
    echo "<tr>";

    for ($x = 0; $x < $fnum; $x++) {
        echo "<td><b>";
        echo strtoupper(pg_field_name($result, $x));
        echo "</b></td>";
    }

    echo "</tr>";

    for ($i = 0; $i < $numrows; $i++) {
        $row = pg_fetch_object($result, $i);
        echo "<tr align='center'>";
        for ($x = 0; $x < $fnum; $x++) {
    $fieldname = pg_field_name($result, $x);
    echo "<td>";
    echo $row->$fieldname;
    echo "</td>";
        }
        echo"</tr>";
    }
    echo "</table>";
   
    return 0;
}
mentat at azsoft dot pl 14-Oct-2002 05:16
$GLOBALS["PG_CONNECT"]=pg_connect(...);
....

function query ($sqlQuery,$var=0) {
   if (!$GLOBALS["PG_CONNECT"]) return 0;
   $lev=error_reporting (8); //NO WARRING!!
   $result=pg_query ($sqlQuery);
   error_reporting ($lev); //DEFAULT!!
   if (strlen ($r=pg_last_error ($GLOBALS["PG_CONNECT"]))) {
      if ($var) {
        echo "<p color=\"red\">ERROR:<pre>";
        echo $sqlQuery;
        echo "</pre>";
        echo $r;
        echo "&lt/p>";
      }
      close_db ();
      return 0;
   }
   return $result;
}
hierophantNOSPAM at pcisys dot net 17-Jun-2002 12:50
Regarding david.bouriaud@ac-rouen.fr:
You misunderstand SQL. When a query is issued, results applicable at the time of the query are returned to the application (i.e. PHP). There is no further reference to the database required. Thus, all of the pg_fetch_* functions are acting on an internal data storage, NOT the database itself. This is because SQL does not have a concept of sets, or of state (except in limited circumstances provided by transactions). However, if you use a cursor instead, fetching only one record at a time, you may get an error if you delete the table. If you don't, it is an issue with Postgres, not PHP.
jvarner at dsrglobal dot com 10-May-2002 03:18
That's why your code should never assume it has the very latest data unless it locks it.
david dot bouriaud at ac-rouen dot fr 07-May-2002 10:54
Hi to all !
It seems that the old pg_exec function does not do what it is expected to.
In the doc, it is said that it returns a resource identifier on the successful querry that was send to the backend.
It seems to me that it is more than a resource identifier.
Follow the example :

<?php
$ConnId
= pg_connect ("blablabla");
$ResId = pg_exec ("select * from table", $ConnId);
pg_close ($ConnId);
$row = pg_fetch_array ($ResId, 4);
?>

I closed the connection voluntarily before the pg_fetch_array. It WORKS !

Now, imagine the following script :
<?php
$ConnId
= pg_connect ("blablabla");
$ResId = pg_exec ("select * from table", $ConnId);
pg_close ($ConnId);
system ("psql base -c delete from table");
$row = pg_fetch_array ($ResId, 4);
?>
See how it could be harmful !!!! I think that the coders have done this for performances reasons, but it is not the right way do do so !!!

 
show source | credits | stats | sitemap | contact | advertising | mirror sites