pg_convert

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

pg_convert Konwertuje tablice asocjacyjne na postać użyteczną w zapytaniu SQL.

Opis

pg_convert ( resource $połączenie , string $nazwa_tabeli , array $tablica_asocjacyjna [, int $opcje = 0 ] ) : array

pg_convert() sprawdza i konwertuje wartości w tablica_asocjacyjna na postać użyteczną dla zapytania SQL. Warunkiem koniecznym dla pg_convert() jest istnienie tabeli nazwa_tabeli, ktora ma przynajmniej tyle kolumn, ile tablica_asocjacyjna ma elementów. Nazwy pól w nazwa_tabeli muszą pasować do indeksów w parametrze tablica_asocjacyjna i odpowiednie typy danych muszą być zgodne. Zwraca tabelę z przekonwertowanymi wartościami w razie sukcesu, FALSE w przeciwnym wypadku.

Informacja:

Od PHP 5.6, funkcja akceptuje wartości logiczne. Są one konwertowane do wartości logicznej PostgreSQ. Reprezentacja wartości logicznych w postaci ciągu znaków również jest wspierana. NULL jest konwertowane do NULL z PostgreSQL.

Do PHP 5.6, jeśli istnieją pola typu boolean w nazwa_tabeli, nie używaj stałej wartości TRUE w parametrze tablica_asocjacyjna. Zostanie on przekonwertowany do łańcucha 'TRUE', który nie jest poprawnym wpisem dla pól typu boolean w PostgreSQL. W zamian użyj jednej z propozycji: t, true, 1, y, yes.

Parametry

połączenie

Źródło połączenia do bazy PostgreSQL.

nazwa_tabeli

Nazwa tabeli, w stosunku do której będą konwertowane typy.

tablica_asocjacyjna

Dane do konwersji.

options

Kombinacja dowolnej ilości poniższych stałych: PGSQL_CONV_IGNORE_DEFAULT, PGSQL_CONV_FORCE_NULL lub PGSQL_CONV_IGNORE_NOT_NULL.

Zwracane wartości

Typ tablicowy (ang. array) z przekonwertowanymi wartościami, lub FALSE w razie błędu.

Przykłady

Przykład #1 pg_convert() - przykład

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

  
$tmp = array(
      
'autor' => 'Jan Hakreski',
      
'rok' => 2005,
      
'tytuł' => 'Życie Jana Hakerskiego'
  
);

  
$wartosci pg_convert($polaczenie'autorzy'$tmp);
?>

Rejestr zmian

Wersja Opis
5.6.0 Funkcja nie jest dłużej eksperymentalna. Typy boolean i NULL są wspierane. Do nieznanych lub niewspieranych typów danych są dodawane znaki ucieczki, bez walidacji. pg_convert() może być użyta z dowolnym typem danych.

Zobacz też:

add a note 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
1
gorhas at gmail dot com
9 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
20 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
6 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