note 117964 added to pdo.pgsqlcopyfromarray
| From: | Anonymous | Date: | Wed, 09 Sep 2015 16:05:43 +0000 |
| Subject: | note 117964 added to pdo.pgsqlcopyfromarray | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-203756@lists.php.net to get a copy of this message | ||
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));
}
?>
----
Server IP: 72.52.91.14
Probable Submitter: 5.61.14.142
----
Manual Page -- http://php.net/manual/en/pdo.pgsqlcopyfromarray.php
Edit -- https://master.php.net/note/edit/117964
Del: integrated -- https://master.php.net/note/delete/117964/integrated
Del: useless -- https://master.php.net/note/delete/117964/useless
Del: bad code -- https://master.php.net/note/delete/117964/bad+code
Del: spam -- https://master.php.net/note/delete/117964/spam
Del: non-english -- https://master.php.net/note/delete/117964/non-english
Del: in docs -- https://master.php.net/note/delete/117964/in+docs
Del: other reasons-- https://master.php.net/note/delete/117964
Reject -- https://master.php.net/note/reject/117964
Search -- https://master.php.net/manage/user-notes.php