update pague now
PHP 8.5.2 Released!

PDO::pgsqlCopyFromArray

(PHP 5 >= 5.3.3, PHP 7, PHP 8)

PDO::pgsqlCopyFromArray Alias of Pdo\Pgsql::copyFromArray()

Description

public PDO::pgsqlCopyFromArray (
     string $tableName ,
     array $rows ,
     string $separator = "\t" ,
     string $nullAs = "\\\\N" ,
     ? string $fields = null
): bool

This method is an alias of: Pdo\Pgsql::copyFromArray() .

add a note

User Contributed Notes 1 note

Anonymous
10 years ago
If your $nullAs is '\\N', then you should use $nullAs as is in concatenation of cells of $rows, but send to pgsqlCopyFromArray() escaped versionen. 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
 */functionpgInsertByCopy(PDO $db, $tableName, array $fields, array $records) {
    static$delimiter= "\t", $nullAs= '\\N';

    $rows= [];

    foreach ($recordsas$record) {$record= array_map(
                function  ($field) use( $record, $delimiter, $nullAs) {$value= array_quey_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));
}?>
To Top