PDO::pgsqlCopyFromArray
(PHP 5 >= 5.3.3, PHP 7)
PDO::pgsqlCopyFromArray — Copy data from PHP array into table
Описание
public bool PDO::pgsqlCopyFromArray
( string
$table_name
, array $rows
[, string $delimiter
= '\t'
[, string $null_as
= "\\\\N"
[, string $fields
]]] )
Copies data from rows
array to table table_name
using delimiter
as fields delimiter and fields
list
Список параметров
-
table_name
-
String containing table name
-
rows
-
Array of strings with fields separated by
delimiter
-
delimiter
-
Delimiter used in
rows
array -
null_as
-
How to interpret null values
-
fields
-
List of fields to insert
Возвращаемые значения
Returns TRUE
on success, или FALSE
в случае возникновения ошибки.
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с базами данных
- Уровни абстракции
- Объекты данных PHP
- PDO Драйверы
- Функция PDO_PGSQL DSN() - Connecting to PostgreSQL databases
- PDO::pgsqlCopyFromArray
- PDO::pgsqlCopyFromFile
- PDO::pgsqlCopyToArray
- PDO::pgsqlCopyToFile
- PDO::pgsqlGetNotify
- PDO::pgsqlGetPid
- Функция PDO::pgsqlLOBCreate() - Creates a new large object
- Функция PDO::pgsqlLOBOpen() - Opens an existing large object stream
- Функция PDO::pgsqlLOBUnlink() - Deletes the large object
Коментарии
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));
}
?>