ConFoo 2025

pg_convert

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

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

Beschreibung

pg_convert(
    PgSql\Connection $connection,
    string $table_name,
    array $values,
    int $flags = 0
): array|false

pg_convert() prüft und konvertiert die Werte in values in passende Werte für ein SQL-Kommando. Voraussetzung für pg_convert() ist die Existenz einer Tabelle table_name, die mindestens so viele Spalten hat, wie values Elemente. Die Feldnamen in table_name müssen mit den Schlüsseln von values übereinstimmen und die entsprechenden Datentypen müssen kompatibel sein. Zurückgegeben wird bei Erfolg ein Array mit den konvertierten Werten oder false, falls ein Fehler auftrat.

Hinweis:

Boolesche Werte werden akzeptiert und zu booleschen PostgreSQL-Werten konvertiert. Zeichenkettendarstellungen von booleschen Werten werden ebenfalls unterstützt. null wird in PostgreSQL-NULL konvertiert.

Parameter-Liste

connection

Eine PgSql\Connection-Instanz.

table_name

Der Name der Tabelle, für die die Arrayelemente konvertiert werden.

values

Die Daten, die konvertiert werden.

flags

Eie beliebige Kombination der Konstanten PGSQL_CONV_IGNORE_DEFAULT, PGSQL_CONV_FORCE_NULL und PGSQL_CONV_IGNORE_NOT_NULL.

Rückgabewerte

Ein Array mit den konvertierten Werten. Bei einem Fehler wird false zurückgegeben.

Fehler/Exceptions

Wenn der Wert oder der Typ eines Feldes nicht mit einem PostgreSQL-Typ übereinstimmt, wird ein ValueError oder TypeError geworfen.

Changelog

Version Beschreibung
8.3.0 Wenn der Wert oder Typ eines Feldes nicht mit einem PostgreSQL-Typ übereinstimmt, wird nun ein ValueError oder TypeError geworfen; zuvor wurde ein E_WARNING ausgegeben.
8.1.0 Der Parameter connection erwartet nun eine PgSql\Connection-Instanz; vorher wurde eine resource erwartet.

Beispiele

Beispiel #1 pg_convert()-Beispiel

<?php
$dbconn
= pg_connect('dbname=foo');

$tmp = array(
'author' => 'Joe Thackery',
'year' => 2005,
'title' => 'My Life, von Joe Thackery'
);

$vals = pg_convert($dbconn, 'authors', $tmp);
?>

Siehe auch

add a note

User Contributed Notes 5 notes

up
2
Anonymous
20 years ago
The only options that I see are:

PGSQL_CONV_IGNORE_DEFAULT - Do not use DEAFULT value by removing field from returned array
PGSQL_CONV_FORCE_NULL - Convert to NULL if string is null string
PGSQL_CONV_IGNORE_NOT_NULL - Ignore NOT NULL constraints

These are constants, so don't quote them or anything.
up
0
gorhas at gmail dot com
10 years ago
There is a problem when using interval.
If in the array
"time_pause" => '00:30:00'
and time_pause is an interval
the insert fails
pg_insert(): '00:30:00' does not match with '^(@?[ \t]+)?((([-+]?[ \t]+)?[0-9]+(\.[0-9]*)?[ ...
up
0
dharana at dharana dot net
21 years ago
I've found "options" possible values:

PG_CONV_CHECK - check only
PG_CONV_STRICT - raise warning for non fatal error
PG_CONV_QUOTE - add quote around values for vchar, text datetime.
PG_CONV_SLASH - add slashes if it needed.
PG_CONV_NULLCHK - check values are defined for NOT NULL fields.
PG_CONV_NO_DEFAULT - ignore default value even if value is empty string.
up
-1
VLroyrenn
6 years ago
Another thing that's not well documented is that (as of PHP 7.0/7.1) pg_convert doesn't like non-scalar types and will fail (but not throw just emit an E_WARNING and return false) if you pass it anything other than a string or a number, including an array or something like a DateTime. If you want to insert those types, you actually have to convert those yourself.

Also, somewhat surprisingly, $table_name is not compatible with the output of pg_​escape_​identifier, or seemingly any other kind of escaping.
up
-1
Hayley Watson
7 years ago
This will only apply the appropriate escaping and such appropriate for embedding the PHP value into an SQL statement.

It does (by default) check for nulls when the column is marked NOT NULL, and it will complain about trying to convert strings for an integer column (floats will be truncated).

Beyond the barest checking of syntax, however, it does NOT verify that the given value is a legitimate value for the column type.

<?php
// Assuming smallints.smallintis a smallint (-32768..32767) type column
foreach([-1234,
1234,
0,
32767,
-
32768,
32768, // bogus value for smallint type
45.8, // gets truncated to 45
400000, // bogus value for smallint type
] as $smallint)
{
$tmp = ['smallint' => $smallint];
$vals = pg_convert($dbconn, 'smallints', ['smallint' => $smallint]);
echo
$vals['"smallint"'],"\n"; // Notice the column name is also made SQL-safe
}

// Assuming uuids.uuid is a UUID type column
foreach(['a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11',
'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11',
'a0eebc999c0b4ef8bb6d6bb9bd380a11',
'{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}',
'Invalid Not-a-UUID',
'{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}',
'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11',
] as
$uuid)
{
$tmp = ['uuid' => $uuid];
$vals = pg_convert($dbconn, 'uuids', ['uuid' => $uuid]);
echo
$vals['"uuid"'],"\n";
}

?>

All of the above data values will be "converted" - even the invalid ones - without complaint.
To Top