(PHP 4 >= 4.2.0, PHP 5)
pg_copy_from — 根据数组将记录插入表中
$connection
, string $table_name
, array $rows
[, string $delimiter
[, string $null_as
]] )
pg_copy_from() 将数组 rows
的内容作为记录插入表中。它在内部使用了 COPY FROM SQL 命令来插入记录。
connection
PostgreSQL database connection resource.
table_name
Name of the table into which to copy the rows
.
rows
An array of data to be copied into table_name
.
Each value in rows
becomes a row in table_name
.
Each value in rows
should be a delimited string of the values
to insert into each field. Values should be linefeed terminated.
delimiter
The token that separates values for each field in each element of
rows
. Default is TAB.
null_as
How SQL NULL values are represented in the
rows
. Default is \N ("\N").
成功时返回 TRUE
, 或者在失败时返回 FALSE
。
Example #1 pg_copy_from() example
<?php
$db = pg_connect("dbname=publisher") or die("Could not connect");
$rows = pg_copy_to($db, $table_name);
pg_query($db, "DELETE FROM $table_name");
pg_copy_from($db, $table_name, $rows);
?>
Dave (2012-01-26 10:40:41)
As of postgresql 9.1 "standard_conforming_strings" is set to on
This will not work anymore
<?php
$copy_message = "1\t\\N\t300";
pg_copy_from($db, "message", $copy_message);
?>
result will be a "N" in that field. if the field allow text that is else it will fail to insert the post.
simple fix
<?php
$copy_message = "1\t\\NULL\t300";
pg_copy_from($db, "message", $copy_message, "\t","\\NULL");
?>
Dave (2011-02-18 02:39:45)
Fix for "Copy command failed: ERROR: literal carriage return
found in data" or
"Copy command failed: ERROR: missing data for column
"message" CONTEXT: COPY message, line 1:"
<?php
$message = "HEJ\rHEJ\nHEJ\r\nHEJ\n\rHEJ\tHELLO\\";
$message = addslashes($message);
$message = str_replace(
array("\n","\r","\t"),
array("\\n","\\r","\\t"),
$message);
$copy_message = "1\t". $message ."\t300";
pg_copy_from($db, "message", $copy_message);
?>
etiger13 at gmail dot com (2009-11-17 11:10:47)
This will not look in other schema's, only the schema's in your search path. You can temporarily change this behavior with the following code:
<?php
pg_query($conn, "SET search_path TO myschema;");
$copy_from = pg_copy_from($conn, 'tablename', $filetoarray, ",");
if ( !$copy_from )
{
echo pg_last_error($conn);
exit;
}
pg_query("RESET search_path;");
?>
Anonymous (2009-06-11 03:08:05)
see also: pg_put_line for a solution that does not require buffering of all the data to be copied,
kapouer_php at melix dot org (2007-08-26 14:24:13)
pg syntax is :
COPY test (cola, colb, colc) FROM stdin;
...
this function doesn't let you in which order the columns are !
vlad at php dot net (2003-03-19 13:38:45)
By default NULL values are a backslash followed with capital N ("\\N").
Also, you can't insert entries with OIDs (I've added it to my TODO list though)
carl at thep.lu.se (2002-09-10 03:06:52)