pg_query

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

pg_queryクエリを実行する

説明

pg_query(PgSql\Connection $connection = ?, string $query): PgSql\Result|false

pg_query() は、指定したデータベース connection 上で query を実行します。 特別な理由がない限り、この関数よりも pg_query_params() を使うほうがいいでしょう。

エラーが発生して false が返された場合、もし接続が正常なら pg_last_error() 関数を使用してエラーの詳細情報が 取得可能です。

注意: connectionは省略可能ですが、それは推奨されません。 なぜならスクリプトのバグが発見しにくくなるためです。

注意:

この関数は、以前は pg_exec() と呼ばれていました。 pg_exec() は互換性確保のためにまだ使用可能ですが、 新しい名前を使用することが推奨されています。

パラメータ

connection

PgSql\Connection クラスのインスタンス。 connection が指定されない場合は、デフォルトの接続を使います。 デフォルトの接続とは、pg_connect() または pg_pconnect() によって確立された直近の接続です。

警告

PHP 8.1.0 以降では、デフォルトの接続を使うことは推奨されなくなりました。

query

実行する 1 つまたは複数の SQL 文。複数の文が関数に渡された場合は、 明示的に BEGIN/COMMIT コマンドを指定していない限りはそれらの文は ひとつのトランザクションとして実行されます。しかし、1 回のコールで 複数のトランザクションを実行することは推奨されません。

警告

ユーザーから受け取ったデータを文字列に直接組み込むのは危険で、SQL インジェクション の脆弱性を引き起こしがちです。クエリ文字列に直接埋め込むのではなく、 pg_query_params() を使ってパラメータとして指定することを推奨します。

ユーザーから受け取ったデータをクエリ文字列に直接埋め込む場合は、 適切にエスケープ する必要があります。

戻り値

成功した場合に PgSql\Result クラスのインスタンスを返します。 失敗した場合に false を返します

変更履歴

バージョン 説明
8.1.0 PgSql\Result クラスのインスタンスを返すようになりました。 これより前のバージョンでは、リソース を返していました。
8.1.0 connection は、PgSql\Connection クラスのインスタンスを期待するようになりました。 これより前のバージョンでは、リソース を期待していました。

例1 pg_query() の例

<?php

$conn
= pg_pconnect("dbname=publisher");
if (!
$conn) {
echo
"An error occurred.\n";
exit;
}

$result = pg_query($conn, "SELECT author, email FROM authors");
if (!
$result) {
echo
"An error occurred.\n";
exit;
}

while (
$row = pg_fetch_row($result)) {
echo
"Author: $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);

?>

参考

add a note

User Contributed Notes 9 notes

up
4
mentat at azsoft dot pl
22 years ago
$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;}
up
4
a dot mcruer at live dot com
12 years ago
A quick note for novice users: when gathering input from fields on a web form that maintains a database connection, *never* use pg_query to do queries from the field. Always sanitize input using pg_prepare and pg_execute.
up
4
jsuzuki at spamcop dot net
19 years ago
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
up
2
zoli at makettinfo.hu
19 years ago
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)
up
1
cmoore
20 years ago
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.
up
0
mankyd
19 years ago
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   }  }?>
up
-1
Akbar
20 years ago
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');?>
up
-2
mankyd
19 years ago
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.
up
-2
Anonymous
11 years ago
Here is my small function to make it easier for me to use data from select queries (attention, it is sensitive to sql injection)<?phpfunction requestToDB($connection,$request){     if(!$result=pg_query($connection,$request)){        return False;    }    $combined=array();    while ($row = pg_fetch_assoc($result)) {        $combined[]=$row;    }    return $combined;}?>Example:<?php$conn = pg_pconnect("dbname=mydatabase");$results=requestToDB($connect,"select * from mytable");//You can now access a "cell" of your table like this:$rownumber=0;$columname="mycolumn";$mycell=$results[$rownumber][$columname];var_dump($mycell);
To Top