1

我知道我可以将数组插入到 Postgres 数据库中pg_query

INSERT into table (field) VALUES ('{{element, element},{}}')

但是如何使用pg_insert呢?

$array["field"] = "{{element, element},{}}";
$result = pg_insert($con, "table", $array);

字符串是否会作为2D Postgres 数组{{element, element},{}}实际插入?field

我一直想测试一下,但目前我没有任何 PostgreSQL DB 可以测试..

4

2 回答 2

3

我刚刚运行了您的具体示例。

(1) 在 Postgres 中:

CREATE TABLE atable (afield text[][]);

(2) 在 PHP 中:

$array["afield"] = "{{'element', 'element'},{}}";
$result = pg_insert($this->conn, "atable", $array);

我收到以下错误:

Notice: pg_insert(): Unknown or system data type '_text' for 'afield' in ...

我尝试使用数组值:使其成为 2x2 数组、一维等,等等 - 结果相同。我什至将表格更改为将字段设置为一维数组:text[]并相应地更改了代码-我仍然得到相同的结果。

我开始进一步挖掘并在PHP 文档中找到以下内容pg_insert

此功能是实验性的。在 PHP 的未来版本中,此函数的行为、其名称和相关文档可能会更改,恕不另行通知。使用此功能应由您自担风险。

基本上,它有很多问题,不应该使用。有趣的是,使用

pg_query("INSERT INTO...")

工作得很好。希望这能回答您的问题。:)

于 2012-06-11T13:11:22.883 回答
0

任意多的维度,但两个就可以了。

=> CREATE SCHEMA ztest;
CREATE SCHEMA
=> CREATE TABLE tt (a int[3][3]);
CREATE TABLE
=> INSERT INTO tt VALUES (ARRAY[ARRAY[1,2,3], ARRAY[4,5,6], ARRAY[7,8,9]]), (ARRAY[ARRAY[11,12,13],ARRAY[14,15,16],ARRAY[17,18,19]]);
INSERT 0 2
=> SELECT * FROM tt;
                 a
------------------------------------
 {{1,2,3},{4,5,6},{7,8,9}}
 {{11,12,13},{14,15,16},{17,18,19}}
(2 rows)

=> INSERT INTO tt VALUES ('{{21,22,23},{24,25,26},{27,28,29}}');
INSERT 0 1
=> SELECT * FROM tt;
                 a
------------------------------------
 {{1,2,3},{4,5,6},{7,8,9}}
 {{11,12,13},{14,15,16},{17,18,19}}
 {{21,22,23},{24,25,26},{27,28,29}}
(3 rows)

=> SELECT a[2][3] FROM tt;
 a
----
  6
 16
 26
(3 rows)
于 2012-06-11T12:55:01.743 回答