PHP 8.4.2 Released!

pg_select

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

pg_selectWählt Datensätze aus

Beschreibung

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

pg_select() wählt die Datensätze aus der Tabelle table_name aus, die den Elementen (field=>value) in conditions entsprechen. Wenn die Abfrage erfolgreich war, wird ein assoziatives Array mit allen Datensätzen und Werten aus table_name zurückgegeben, die mit den Datensätzen und Werten in conditions identisch sind.

Falls flags gesetzt ist, wird pg_convert() mit den angegebenen Flags auf conditions angewendet.

Wenn mode gesetzt ist, ist der Rückgabewert bei PGSQL_NUM ein Array, bei PGSQL_ASSOC (Standard) ein assoziatives Array und bei PGSQL_BOTH beides.

Standardmäßig übergibt pg_select() Rohwerte. Die Werte müssen entweder maskiert werden oder es muss die Option PGSQL_DML_ESCAPE angegeben werden. PGSQL_DML_ESCAPE maskiert Parameter und Bezeichner und setzt sie in Anführungszeichen. Daher muss bei Tabellen- und Spaltennamen zwischen Groß- und Kleinschreibung unterschieden werden.

Es ist zu beachten, dass weder die Maskierung noch eine vorbereitete Abfrage LIKE-Abfragen, JSON, Array, Regex usw. schützen können. Diese Parameter sollten im Kontext behandelt werden, d. h. Werte maskieren und validieren.

Parameter-Liste

connection

Eine PgSql\Connection-Instanz.

table_name

Der Name der Tabelle, aus der die Datensätze ausgewählt werden.

conditions

Ein Array, dessen Schlüssel Feldnamen von table_name sind und dessen Werte mit den entsprechenden Werten in table_name übereinstimmen müssen, damit der Datensatz zurückgegeben werden kann. Seit PHP 8.4.0 gelten keine Bedingungen mehr, wenn ein leeres Array angegeben wird. Zuvor schlug die Funktion fehl, wenn das Argument für conditions leer war.

flags

Eine beliebige Kombination aus PGSQL_CONV_FORCE_NULL, PGSQL_DML_NO_CONV, PGSQL_DML_ESCAPE, PGSQL_DML_EXEC, PGSQL_DML_ASYNC und PGSQL_DML_STRING. Falls PGSQL_DML_STRING in den options enthalten ist, wird der Abfragestring zurückgegeben. Werden PGSQL_DML_NO_CONV oder PGSQL_DML_ESCAPE angegeben, wird pg_convert() intern nicht aufgerufen.

mode

Eine beliebige Kombination aus PGSQL_ASSOC, PGSQL_NUM und PGSQL_BOTH. Wenn PGSQL_ASSOC gesetzt ist, ist der Rückgabewert ein assoziatives Array, bei PGSQL_NUM ist es ein Array, und bei PGSQL_BOTH ist es ein sowohl assoziativ als auch numerisch indiziertes Array.

Rückgabewerte

Gibt einen String zurück, falls PGSQL_DML_STRING im Parameter flags übergeben wurde, andernfalls wird bei Erfolg ein Array zurückgegeben. Bei einem Fehler wird false zurückgegeben.

Changelog

Version Beschreibung
8.4.0 conditions ist nun optional.
8.1.0 Der Parameter connection erwartet nun eine PgSql\Connection-Instanz; vorher wurde eine Ressource erwartet.
7.1.0 Der Parameter mode wurde hinzugefügt.

Beispiele

Beispiel #1 pg_select()-Beispiel

<?php
$db
= pg_connect('dbname=foo');
// Das ist einigermaßen sicher, da alle Werte maskiert werden.
// Allerdings unterstützt PostgreSQL JSON/Array. Diese sind nicht
// sicher, da sie Abfragen weder maskieren noch vorbereiten.
$rec = pg_select($db, 'post_log', $_POST, PG_DML_ESCAPE);
if (
$rec) {
echo
"Datensätze ausgewählt\n";
var_dump($rec);
} else {
echo
"Falsche Eingabe\n";
}
?>

Siehe auch

  • pg_convert() - Konvertiert die Werte eines assoziativen Arrays in die für SQL-Anweisungen passende Form

add a note

User Contributed Notes 2 notes

up
4
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
-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