PHP 8.5.0 Alpha 2 available for testing

pg_query

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

pg_query Ejecuta una consulta PostgreSQL

Descripción

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

pg_query() ejecuta la consulta query en la base de datos especificada connection. pg_query_params() debe preferirse en la mayoría de los casos.

Si ocurre un error y se devuelve false, los detalles del error pueden recuperarse utilizando la función pg_last_error() si la conexión es válida.

Nota: Aunque connection puede omitirse, no se recomienda hacerlo, ya que puede resultar difícil encontrar errores en los scripts.

Nota:

Anteriormente, esta función se llamaba pg_exec(). pg_exec() sigue disponible por razones de compatibilidad, pero se recomienda a los usuarios utilizar el nuevo nombre.

Parámetros

connection

Una instancia PgSql\Connection. Cuando connection no es especificado, se usa la conexión por defecto. La conexión por defecto es la última conexión hecha por pg_connect() o pg_pconnect()

Advertencia

Desde PHP 8.1.0, usar la conexión por defecto está obsoleto.

query

La consulta o consultas SQL a ejecutarse. Cuando se pasan varias consultas a la función, se ejecutan automáticamente como una transacción, a menos que se incluyan los comandos BEGIN/COMMIT en la consulta. Sin embargo, no se recomienda el uso de múltiples transacciones en una sola llamada de función.

Advertencia

La interpolación de strings proporcionados por el usuario es extremadamente peligrosa y debe tenerse en cuenta el conjunto de vulnerabilidades relacionadas con las inyecciones SQL. En la mayoría de los casos, debe preferirse la función pg_query_params(); es preferible pasar los valores proporcionados por el usuario como argumentos, en lugar de sustituirlos en la consulta.

Todos los datos de usuario sustituidos directamente en el string de la consulta deben ser propiamente escapados.

Valores devueltos

Una instancia PgSql\Result en caso de éxito, o false si ocurre un error.

Historial de cambios

Versión Descripción
8.1.0 Ahora devuelve una instancia de PgSql\Result ; anteriormente, se devolvía un resource.
8.1.0 El parámetro connection ahora espera una instancia de PgSql\Connection ; anteriormente, se esperaba un resource.

Ejemplos

Ejemplo #1 Ejemplo con pg_query()

<?php

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

$result = pg_query($conn, "SELECT autor, email FROM autores");
if (!
$result) {
echo
"Ocurrió un error.\n";
exit;
}

while (
$row = pg_fetch_row($result)) {
echo
"Autor: $row[0] E-mail: $row[1]";
echo
"<br />\n";
}

?>

Ejemplo #2 Uso de pg_query() con múltiples consultas

<?php

$conn
= pg_pconnect("dbname=publisher");

// estas consultas se ejecutarán como una sola transacción

$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);

?>

Ver también

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
19 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)
<?php
function 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