pg_select

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

pg_select Realiza una selección PostgreSQL

Descripción

pg_select(
    PgSql\Connection $connection,
    string $table_name,
    array $conditions = [],
    int $flags = PGSQL_DML_EXEC,
    int $mode = PGSQL_ASSOC
): array|string|false

pg_select() selecciona los registros por conditions que está en formato campo=>valor. Cuando la consulta tiene éxito, devuelve un array que contiene todos los registros y campos que cumplen la condición especificada por conditions.

Si flags está especificado, pg_convert() se aplica a values con los flags proporcionados.

Si el parámetro mode está definido, el valor de retorno será en forma de un array indexado con PGSQL_NUM, un array asociativo con PGSQL_ASSOC (por defecto), o ambos con PGSQL_BOTH.

Por defecto pg_delete() pasa valores sin tratar. Los valores deben ser escapados o la opción PGSQL_DML_ESCAPE debe ser proporcionada. PGSQL_DML_ESCAPE pone comillas y escapa los parámetros/identificadores. Por lo tanto, los nombres de tabla/columnas deben ser sensibles a mayúsculas y minúsculas.

Tenga en cuenta que ni el escape ni las consultas preparadas pueden proteger de consultas LIKE, JSON, Arrays, Regex, etc. Estos parámetros deberían ser tratados según su contexto. Es decir, escapar/validar los valores.

Parámetros

connection

An PgSql\Connection instance.

table_name

Nombre de la tabla desde la cual seleccionar las filas.

conditions

Un array cuyas claves son los nombres de los campos en la tabla table_name, y cuyos valores son las condiciones que una fila debe cumplir para ser recuperada. A partir de PHP 8.4.0, cuando se proporciona un array vacío, no se aplicará ninguna condición. Anteriormente, la función fallaba con un argumento conditions vacío.

flags

Cualquier número de PGSQL_CONV_FORCE_NULL, PGSQL_DML_NO_CONV, PGSQL_DML_ESCAPE, PGSQL_DML_EXEC, PGSQL_DML_ASYNC o PGSQL_DML_STRING combinados. Si PGSQL_DML_STRING forma parte de los flags, entonces se devuelve la cadena de consulta. Cuando PGSQL_DML_NO_CONV o PGSQL_DML_ESCAPE está activado, pg_convert() no es llamado internamente.

mode

Cualquier número de PGSQL_ASSOC, PGSQL_NUM o PGSQL_BOTH. Si PGSQL_ASSOC está definido, el valor de retorno será un array asociativo, con PGSQL_NUM, el valor de retorno será un array indexado numéricamente, y con PGSQL_BOTH, el valor de retorno será tanto un array asociativo como numéricamente indexado.

Valores devueltos

Devuelve un string si PGSQL_DML_STRING es proporcionado a través de flags, de lo contrario esto devuelve un array en caso de éxito, o false en caso de error.

Historial de cambios

Versión Descripción
8.4.0 conditions ahora es opcional.
8.1.0 The connection parameter expects an PgSql\Connection instance now; previously, a recurso was expected.
7.1.0 El parámetro mode ha sido añadido.

Ejemplos

Ejemplo #1 Ejemplo con pg_select()

<?php
$db
= pg_connect ('dbname=foo');
// Esto es seguro en cierta medida, ya que todos los valores están escapados
// Sin embargo PostgreSQL soporta JSON/Arrays. Estos no son
// seguros ni por escape ni por consultas preparadas.
$rec = pg_select($db, 'post_log', $_POST, PG_DML_ESCAPE);
if (
$rec) {
echo
"Filas leídas\n";
var_dump($rec);
} else {
echo
"Problema en los datos de usuario\n";
}
?>

Ver también

  • pg_convert() - Conviertir valores de un array asociativo en valores adecuados para sentencias SQL

add a note

User Contributed Notes 2 notes

up
5
david dot tulloh at infaze dot com dot au
20 years ago
Valid options are PGSQL_DML_NO_CONV, PGSQL_DML_EXEC, PGSQL_DMP_ASYNC, PGSQL_DML_STRING (pulled out of source code).

This function does not support selecting from multiple tables. You can get around this by setting the PGSQL_DML_NO_CONV option. This prevents the error which occurs when the function tries to convert the condition array.

I think it is also important to point out that the table_name field is not safe, particularily with the PGSQL_DML_NO_CONV option.

The arguements array field is compulsory, as documented. What isn't so clear is that the array has to actually have some values in it, you can't do a select all.

In summary, this function is good for a very small subset of basic queries. If you are after anything more complex you are better off with pg_query.
up
-4
wietse at cj2 dot nl
19 years ago
David mentioned that you can't do a Select all.
However, when executing this script:
<?php
$conn_string
= "dbname=mydb";
$db = pg_connect($conn_string);
$selectfields = array("imgid" => "");
$records = pg_select($db,"mmsfiles",$selectfields);
print_r($records);
?>
...I get this result:
Array
(
[0] => Array
(
[imgid] => 1
[file] => /home/wietse/public_html/mms/images/1.gif
[thumb] =>
)
[1] => Array
(
[imgid] => 2
[file] => /home/wietse/public_html/mms/images/2.gif
[thumb] =>
)
[2] => Array
(
[imgid] => 3
[file] => /home/wietse/public_html/mms/images/3.gif
[thumb] =>
)
[3] => Array
(
[imgid] => 4
[file] => /home/wietse/public_html/mms/images/4.gif
[thumb] =>
)
)
To Top