pg_convert
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
pg_convert — 将关联的数组值转换为适合 SQL 语句的格式
说明
pg_convert(
PgSql\Connection
string
array
int
): array|false
PgSql\Connection
$connection
,string
$table_name
,array
$values
,int
$flags
= 0): array|false
pg_convert() 检查 values
中的值并将其转换为为适用于
SQL 语句的值。pg_convert() 的前提条件是现有的表 table_name
中具有的列至少有 values
中的单元那么多。table_name
中的字段名以及字段值必须匹配 values
中的索引,并且相应的数据类型必须兼容。成功时返回包含转换后的值的数组,否则返回 false
。
注意:
接受 bool 值并转换为 PostgreSQL boolean 值。还支持 bool 值的字符串表示。
null
转换为 PostgreSQL NULL。
参数
connection
-
PgSql\Connection 实例。
table_name
-
要转换类型的表名。
values
-
要转换的数据。
flags
-
PGSQL_CONV_IGNORE_DEFAULT
、PGSQL_CONV_FORCE_NULL
或PGSQL_CONV_IGNORE_NOT_NULL
的任意数量组合。
错误/异常
当字段的值或类型不能正确匹配 PostgreSQL 的类型时,会抛出 ValueError 或 TypeError。
更新日志
版本 | 说明 |
---|---|
8.3.0 |
当字段的值或类型不能正确匹配 PostgreSQL 的类型时,现在会抛出 ValueError 或
TypeError 错误;之前触发 E_WARNING 。
|
8.1.0 |
现在 connection 参数接受 PgSql\Connection
实例,之前接受 resource。
|
示例
示例 #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);
?>
参见
- pg_meta_data() - 获得表的元数据
- pg_insert() - 将数组插入到表中
- pg_select() - 选择记录
- pg_update() - 更新表
- pg_delete() - 删除记录
+添加备注
用户贡献的备注 5 notes
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.
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]*)?[ ...
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.
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.
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.