SunshinePHP 2018 CFP Started

pg_convert

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

pg_convert Konvertiert die Werte eines assoziativen Arrays in passende Werte für SQL-Kommandos.

Beschreibung

array pg_convert ( resource $connection , string $table_name , array $assoc_array [, int $options = 0 ] )

pg_convert() prüft und konvertiert die Werte in assoc_array 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 assoc_array Elemente. Die Feldnamen in table_name müssen mit den Schlüsseln von assoc_array ü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:

Ab PHP 5.6.0 werden boolesche Werte akzeptiert, die zu booleschen PostgreSQL Werten konvertiert werden. Zeichenkettendarstellungen von booleschen Werten werden ebenfalls unterstützt. NULL wird in PostgreSQL NULL konvertiert.

Vor PHP 5.6.0 gilt: falls die Tabelle table_name boolesche Felder enthält, dürfen Sie die Konstante TRUE nicht als Wert im Array assoc_array verwenden. Sie wird zu dem String 'TRUE' konvertiert, der kein gültiger Wert für boolesche Felder in PostgreSQL ist. Benutzen Sie stattdessen t, true, 1, y oder yes.

Parameter-Liste

connection

PostgreSQL Verbindungskennung.

table_name

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

assoc_array

Die Daten, die konvertiert werden.

options

Beliebige Kombination der Konstanten PGSQL_CONV_IGNORE_DEFAULT, PGSQL_CONV_FORCE_NULL oder PGSQL_CONV_IGNORE_NOT_NULL.

Rückgabewerte

Ein array mit den konvertierten Werten oder FALSE, falls ein Fehler auftrat.

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);
?>

Changelog

Version Beschreibung
5.6.0 Nicht länger experimentell. Boolesche/NULL Datentypen werden unterstützt. Unbekannte/nicht unterstützte Datentypen werden ohne Gültigkeitsprüfung maskiert. pg_convert() kann mit jedem Datentypen verwendet werden.

Siehe auch

add a note add a note

User Contributed Notes 5 notes

up
1
Anonymous
13 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
Hayley Watson
1 month 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.
up
0
gorhas at gmail dot com
2 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
14 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
-2
Andrew Falanga
12 years ago
Why does this function, pg_convert(), reject the string 'TRUE' as a valid value for the boolean types?  I'm using PHP 4.3.9 and my web page originally set the value for submission to update, to 'TRUE'.  pg_convert() threw it back to me saying that it's not a valid value for boolean types.  However, the postgresql website says otherwise.  See http://www.postgresql.org/docs/7.4/static/datatype-boolean.html for the context of my question/comment.
To Top