pg_convert

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

pg_convert 連想配列の値を、SQL 文として実行可能な形式に変換する

説明

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

pg_convert() は、assoc_array の中の値をチェックし、SQL 文の中で使用可能な形式に変換します。 少なくとも assoc_array の要素数以上のカラムを持つ テーブル table_name が存在することが前提条件と なります。assoc_array の要素名が table_name のフィールド名と一致し、また 要素に対応する値はフィールドのデータ型と互換性がなければなりません。 成功した場合に変換後の値の配列、それ以外の場合に FALSE を返します。

注意:

PHP 5.6.0 以降は、boolean 値も受け付けるようになりました。 PostgreSQL の boolean 型に変換します。 boolean 値の文字列表現にも対応しています。 NULL は、PostgreSQL の NULL に変換します。

PHP 5.6.0 より前のバージョンでは、論理型のフィールドが table_name にあった場合、 対応する assoc_array では定数 TRUE を使用 しないでください。これは文字列 'TRUE' に変換されてしまい、PostgreSQL では論理型として無効な形式になります。代わりに t、true、1、y、yes のうちのひとつを用いてください。

警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

パラメータ

connection

PostgreSQL データベースの接続リソース。

table_name

変換対象となるテーブルの名前。

assoc_array

変換されるデータ。

options

PGSQL_CONV_IGNORE_DEFAULT, PGSQL_CONV_FORCE_NULL あるいは PGSQL_CONV_IGNORE_NOT_NULL の組み合わせ。

返り値

変換された値の配列を返します。エラー時には FALSE を返します。

例1 pg_convert() の例

<?php 
  $dbconn 
pg_connect('dbname=foo');
  
  
$tmp = array(
      
'author' => 'Joe Thackery',
      
'year' => 2005,
      
'title' => 'My Life, by Joe Thackery'
  
);
  
  
$vals pg_convert($dbconn'authors'$tmp);
?>

変更履歴

バージョン 説明
5.6.0 実験的な関数ではなくなりました。Boolean/NULL をサポートするようになりました。 未知のデータ型やサポートしていないデータ型は、バリデーションなしにエスケープします。 pg_convert() は任意のデータ型で使えるようになりました。

参考

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
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
-1
Hayley Watson
2 months 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
-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