Please note that a very old bug (#76548) has been fixed in 7.2.8.
Previously, pg_fetch_result did not fetch the next row if $row was omitted.
It is now well the case, so bad use of the function can now cause some bugs in your codes.
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
pg_fetch_result — Devuelve los valores de un resultado
pg_fetch_result() devuelve el valor de una fila y un campo (columna) en particular a partir de una instancia PgSql\Result.
Nota:
Esta función puede llamarse pg_result().
result
An PgSql\Result instance, returned by pg_query(), pg_query_params() or pg_execute()(among others).
row
Número de la fila a recuperar. Las filas están numeradas a partir de 0. Si el argumento es omitido, se recupera la siguiente fila.
field
Una cadena de tipo string que representa el nombre del campo (columna) a recuperar, o un entero de tipo int que representa el número del campo a recuperar. Los campos están numerados a partir de 0.
Los valores booleanos son devueltos como "t" o "f". Todos los otros tipos, incluyendo los arrays, son devueltos como cadenas formateadas, de la misma manera que PostgreSQL los mostraría en el cliente psql. Los valores NULL de la base de datos son devueltos como NULL.
false
es devuelto si row
excede el número de filas en el conjunto
de resultados, no hay más filas disponibles o cualquier otro error.
Versión | Descripción |
---|---|
8.3.0 |
row ahora puede ser nullable.
|
8.1.0 |
The result parameter expects an PgSql\Result
instance now; previously, a recurso was expected.
|
Ejemplo #1 Ejemplo con pg_fetch_result()
<?php
$db = pg_connect("dbname=users user=me");
$res = pg_query($db, "SELECT 1 UNION ALL SELECT 2");
$val = pg_fetch_result($res, 1, 0);
echo "El primer campo en la segunda fila es: ", $val, "\n";
?>
El resultado del ejemplo sería:
El primer campo en la segunda fila es: 2
Please note that a very old bug (#76548) has been fixed in 7.2.8.
Previously, pg_fetch_result did not fetch the next row if $row was omitted.
It is now well the case, so bad use of the function can now cause some bugs in your codes.
Comment on boolean fields:
If you retrieve a boolean value from the PostgreSQL database, be aware that the value returned will be either the character 't' or the character 'f', not an integer. So, the statement
if (pg_fetch_result($rsRecords,0,'blnTrueFalseField')) {
echo "TRUE";
} else {
echo "FALSE";
}
will echo "TRUE" in either case (True or False stored in the field). In order to work as expected, do this instead:
if (pg_fetch_result($rsRecords,0,'blnTrueFalseField') == 't') {
echo "TRUE";
} else {
echo "FALSE";
}
See bug #33809 http://bugs.php.net/bug.php?id=33809
Whether this really is a bug or a feature is not clear.
However, it is probably best to always put your column names in extra quotes.
$res = pg_query(...);
$colname = pg_field_name($res, $j);
pg_fetch_result($res, $i, "\"$colname\"");
In order to use upper case in pg_fetch_result column names, it is apparently necessary to include explicit quotation marks.
Thus when I do this sort of thing:
$res = pg_query(...);
$ncols = pg_num_fields($res);
for ($j = 0; $j < $ncols; ++$j) {
$colname[$j] = pg_field_name($res, $j);
$name = htmlspecialchars($colname[$j]);
print("Column $j name = \"$name\"\n");
$value = htmlspecialchars(pg_fetch_result($res, 0, $colname[$j]));
print("Column \"{$colname[$j]}\" value = \"$value\"\n");
}
I get this sort of thing:
[....]
Warning: pg_fetch_result() [function.pg-fetch-result]: Bad column offset specified in /.../view.php on line 247
Column 8 name = "VEC index"
Column "VEC index" value = ""
But if I change the $value line to this:
$value = htmlspecialchars(pg_fetch_result($res, 0, "\"$colname[$j]\""));
I get this:
[...]
Column 8 name = "VEC index"
Column "VEC index" value[0] = "47"
In my opinion, pg_fetch_result(...) should use the quotes already. In other words, this may be a bug in the PHP postgres library. It does not seem to be a documented feature of pg_fetch_result() although the postgresql manual documents it under "SQL syntax", "Lexical structure".
PHP version 5.1.4.
psql version 8.1.4.
Use can 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');
?>