如果您遇到 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 實例;以前需要一個資源。 |
範例 #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" 並不一樣。許多函式都會受到雙引號處理跳脫字元的方式與單引號不同的影響。我總是忘記這一點。