CakeFest 2024: The Official CakePHP Conference

pg_select

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

pg_select Effectue une sélection PostgreSQL

Description

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

pg_select() sélectionne les enregistrements par conditions qui est au format field=>value. Lorsque la requête réussit, elle retourne un tableau contenant tous les enregistrements et champs qui vérifient la condition spécifiée parconditions.

Si flags est spécifié, pg_convert() est appliqué à values avec les drapeaux fournit.

Si le paramètre mode est défini, la valeur de retour sera sous la forme d'un tableau indexé avec PGSQL_NUM, un tableau associatif avec PGSQL_ASSOC (par défaut), ou les deux avec PGSQL_BOTH.

Par défaut pg_delete() passe des valeurs brutes. Les valeurs doivent être échappé ou l'option PGSQL_DML_ESCAPE doit être fournit. PGSQL_DML_ESCAPE met des guillemets et échappe les paramètres/idantifiants. Par conséquent, les noms de table/colonnes doivent être sensible à la casse.

Notez que ni l'échappement ni les requêtes préparer peuvent protéger des requêtes LIKE, JSON, Tableaux, Regex, etc. Ces paramètres devraient être traité en fonction de leur contexte. C'est à dire échapper/valider les valeurs.

Liste de paramètres

connection

Une instance PgSql\Connection.

table_name

Nom de la table à partir de laquelle sélectionner les lignes.

conditions

Un array dont les clés sont les noms des champs dans la table table_name, et dont les valeurs sont les conditions qu'une ligne doit remplir pour être récupérée.

flags

Un nombre quelconque de PGSQL_CONV_FORCE_NULL, PGSQL_DML_NO_CONV, PGSQL_DML_ESCAPE, PGSQL_DML_EXEC, PGSQL_DML_ASYNC ou PGSQL_DML_STRING combinés. Si PGSQL_DML_STRING fait partie des flags, alors la chaîne de requête est renvoyée. Lorsque PGSQL_DML_NO_CONV ou PGSQL_DML_ESCAPE est activé, pg_convert() n'est pas appelée en interne.

mode

Un nombre quelconque de PGSQL_ASSOC, PGSQL_NUM ou PGSQL_BOTH. Si PGSQL_ASSOC est défini, la valeur de retour sera un array associatif, avec PGSQL_NUM, la valeur de retour sera un array indexé numériquement, et avec PGSQL_BOTH, la valeur de retour sera à la fois un array associatif et numériquement indexé.

Valeurs de retour

Retourne une string si PGSQL_DML_STRING est fournit via flags, sinon ceci retourne un array en cas de succès, ou false si une erreur survient.

Historique

Version Description
8.1.0 Le paramètre connection attend désormais une instance de PgSql\Connection ; auparavant, une ressource était attendu.
7.1.0 Le paramètre mode a été ajouté.

Exemples

Exemple #1 Exemple avec pg_select()

<?php
$db
= pg_connect ('dbname=foo');
// Ceci est sûr quelque peu, car toutes les valeurs sont échappées
// Cependant PostgreSSQL supporte les JSON/Tableaux. Ceci ne sont pas
// sûr ni par échappement ni par les requêtes préparés.
$rec = pg_select($db, 'post_log', $_POST, PG_DML_ESCAPE);
if (
$rec) {
echo
"Lignes lues\n";
var_dump($rec);
} else {
echo
"Problème dans les données utilisateur\n";
}
?>

Voir aussi

  • pg_convert() - Convertit des valeurs d'un tableaux associatifs en une forme convenable pour des requêtes SQL

add a note

User Contributed Notes 2 notes

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