PHP Conference Nagoya 2025

pg_select

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

pg_select Seleciona registros

Descrição

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

pg_select() seleciona registros especificados por conditions que tem field=>value. Para uma consulta bem-sucedida, ele retorna um array contendo todos os registros e campos que correspondem à condição especificada por conditions.

Se flags estiver definido, pg_convert() será aplicado às conditions com as opções (flags) especificadas.

Se mode for definido, o valor de retorno estará na forma de um array com PGSQL_NUM, um array associativo com PGSQL_ASSOC (padrão) ou ambos com PGSQL_BOTH.

Por padrão, pg_select() passa valores brutos. Os valores devem ter escape ou a opção PGSQL_DML_ESCAPE deve ser especificada. PGSQL_DML_ESCAPE cita e escapa parâmetros/identificadores. Portanto, os nomes de tabelas/colunas tornaram-se sensíveis a maiúsculas e minúsculas.

Observe que nem o escape nem a consulta preparada podem proteger a consulta LIKE, JSON, Array, Regex, etc. Esses parâmetros devem ser tratados de acordo com seus contextos. ou seja, escapar/validar valores.

Parâmetros

connection

Uma instância de PgSql\Connection.

table_name

Nome da tabela da qual selecionar linhas.

conditions

Um array cujas chaves são nomes de campos na tabela table_name e cujos valores são as condições que uma linha deve atender para ser recuperada.

flags

Qualquer número de PGSQL_CONV_FORCE_NULL, PGSQL_DML_NO_CONV, PGSQL_DML_ESCAPE, PGSQL_DML_EXEC, PGSQL_DML_ASYNC ou PGSQL_DML_STRING combinado. Se PGSQL_DML_STRING fizer parte dos flags então a string de consulta será retornada. Quando PGSQL_DML_NO_CONV ou PGSQL_DML_ESCAPE está definido, ele não chama pg_convert() internamente.

mode

Qualquer número de PGSQL_ASSOC, PGSQL_NUM ou PGSQL_BOTH Se PGSQL_ASSOC for definido o valor de retorno será um array associativo, com PGSQL_NUM o valor de retorno será um array , e com PGSQL_BOTH o valor de retorno será um array associativo e indexado numericamente.

Valor Retornado

Retorna string se PGSQL_DML_STRING for passado via flags, caso contrário, retorna um array em caso de sucesso, ou false em caso de falha.

Registro de Alterações

Versão Descrição
8.1.0 O parâmetro connection agora espera uma instância de PgSql\Connection; anteriormente, um resource era esperado.
7.1.0 O parâmetro mode foi adicionado.

Exemplos

Exemplo #1 Exemplo de pg_select()

<?php
$db
= pg_connect('dbname=foo');
// Isso é um tanto seguro, já que todos os valores têm escape.
// No entanto, o PostgreSQL suporta JSON/Array. Estes não são
// seguros nem por escape nem por consulta preparada.
$rec = pg_select($db, 'post_log', $_POST, PG_DML_ESCAPE);
if (
$rec) {
echo
"Registros selecionados\n";
var_dump($rec);
} else {
echo
"Usuário deve ter enviado entradas erradas\n";
}
?>

Veja Também

  • pg_convert() - Converte valores de array associativo em formas adequadas para instruções SQL

adicione uma nota

Notas Enviadas por Usuários (em inglês) 2 notes

up
2
david dot tulloh at infaze dot com dot au
19 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
18 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