note 117964 added to pdo.pgsqlcopyfromarray

From: 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

« previous php.notes (#203756) next »