如果您遇到来自 postgres 的臭名昭著的“必须是超级用户才能向文件或从文件复制”错误,则需要此函数。
(PHP 4 >= 4.0.3, PHP 5, PHP 7, PHP 8)
pg_put_line — 将以 NULL 结尾的字符串发送到 PostgreSQL 后端
pg_put_line() 将以 NULL 结尾的字符串发送到 PostgreSQL 后端服务器。这需要与 PostgreSQL 的 COPY FROM
命令结合使用。
COPY
是 PostgreSQL 支持的高速数据加载接口。数据在未经解析的情况下以单个事务传递。
使用原始 pg_put_line() 命令的替代方法是使用 pg_copy_from()。这是一个更简单的接口。
注意:
应用程序必须在最后一行显式发送两个字符“\.”,以指示后端已完成发送数据,然后发出 pg_end_copy()。
使用 pg_put_line() 会导致大多数大型对象操作(包括 pg_lo_read() 和 pg_lo_tell())随后失败。您可以改用 pg_copy_from() 和 pg_copy_to()。
connection
一个 PgSql\Connection 实例。当 connection
未指定时,将使用默认连接。默认连接是 pg_connect() 或 pg_pconnect() 最后建立的连接。
从 PHP 8.1.0 开始,使用默认连接已弃用。
data
要直接发送到 PostgreSQL 后端的一行文本。NULL
终止符会自动添加。
版本 | 描述 |
---|---|
8.1.0 | connection 参数现在期望一个 PgSql\Connection 实例;以前,期望一个 resource。 |
示例 #1 pg_put_line() 示例
<?php
$conn = pg_pconnect("dbname=foo");
pg_query($conn, "create table bar (a int4, b char(16), d float8)");
pg_query($conn, "copy bar from stdin");
pg_put_line($conn, "3\thello world\t4.5\n");
pg_put_line($conn, "4\tgoodbye world\t7.11\n");
pg_put_line($conn, "\\.\n");
pg_end_copy($conn);
?>
如果您遇到来自 postgres 的臭名昭著的“必须是超级用户才能向文件或从文件复制”错误,则需要此函数。
使用此函数时,请勿被使用“literal\tanotherliteral\n”问题困扰,因为使用了单引号与双引号。“literal\tanotherliteral\n”并不相同。许多函数都会受到双引号如何处理转义字符与单引号不同的影响。我总是忘记这一点。