PDO::pgsqlCopyFromArray

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

PDO::pgsqlCopyFromArray 别名 Pdo\Pgsql::copyFromArray()

说明

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

此方法是该方法的别名: Pdo\Pgsql::copyFromArray().

添加备注

用户贡献的备注 1 note

up
2
Anonymous
9 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 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));}?>
To Top