• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • pg_convert()

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

    将关联的数组值转换为适合 SQL 语句的格式。

    说明

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

    pg_convert()检查assoc_array中的值并将其转换为为适用于 SQL 语句的值。pg_convert()的前提条件是现有的表table_name中具有的列至少有assoc_array中的单元那么多。table_name中的字段名以及字段值必须和assoc_array中的键名及值匹配。如果成功则返回一个包括转换后的值的数组,否则返回FALSE

    Note:

    If there are boolean fields in$table_namedon't use the constant TRUE in$assoc_array. It will be converted to the string 'TRUE' which is no valid entry for boolean fields in PostgreSQL. Use one of t, true, 1, y, yes instead.

    Warning

    此函数是实验性的。此函数的表象,包括名称及其相关文档都可能在未来的PHP 发布版本中未通知就被修改。使用本函数风险自担。

    参数

    $connection

    PostgreSQL database connection resource.

    $table_name

    Name of the table against which to convert types.

    $assoc_array

    Data to be converted.

    $options

    Any number of PGSQL_CONV_IGNORE_DEFAULT,PGSQL_CONV_FORCE_NULL or PGSQL_CONV_IGNORE_NOT_NULL, combined.

    返回值

    An array of converted values, or FALSE on error.

    范例

    Example #1 pg_convert() example

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

    参见

    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.
    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.
    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]*)?[ ...
    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.
    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.