• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • PDO::pgsqlCopyFromArray()

    (PHP 5 >= 5.3.3, PHP 7)

    Copy data from PHP array into table

    说明

    publicPDO::pgsqlCopyFromArray(string $table_name,array $rows[,string $delimiter= 't'[,string $null_as= "N"[,string $fields]]]): bool

    Copies data from$rowsarray to table$table_nameusing$delimiteras fields delimiter and$fieldslist

    参数

    $table_name

    String containing table name

    $rows

    Array of strings with fields separated by$delimiter

    $delimiter

    Delimiter used in$rowsarray

    $null_as

    How to interpret null values

    $fields

    List of fields to insert

    返回值

    Returns TRUE on success,或者在失败时返回FALSE.

    If your $nullAs is '\\N', then you should use $nullAs as is in concatenation of cells of $rows, but send to pgsqlCopyFromArray() escaped version. Also fifth arg $fields should be a SQL-valid string for the column_names placeholder in COPY statement of PostgreSQL.
    I provide my smart wrapper for pgsqlCopyFromArray() which do this automatically.
    <?php
    /**
     *
     * @param PDO $db
     * @param string $tableName
     * @param string[] $fields List of fields names.
     * @param array[] $records Two-demension array of cells (array of rows).
     * @return boolean
     */
    function pgInsertByCopy (PDO $db, $tableName, array $fields, array $records) {
      static $delimiter = "\t", $nullAs = '\\N';
      $rows = [];
      foreach ($records as $record) {
        $record = array_map(
            function ($field) use( $record, $delimiter, $nullAs) {
              $value = array_key_exists($field, $record) ? $record[$field] : null;
              if (is_null($value)) {
                $value = $nullAs;
              } elseif (is_bool($value)) {
                $value = $value ? 't' : 'f';
              }
              $value = str_replace($delimiter, ' ', $value);
              // Convert multiline text to one line.
              $value = addcslashes($value, "\0..\37");
              return $value;
            }, $fields);
        $rows[] = implode($delimiter, $record) . "\n";
      }
      return $db->pgsqlCopyFromArray($tableName, $rows, $delimiter, addslashes($nullAs), implode(',', $fields));
    }
    ?>