PHP:Postgres数组和pg_insert

时间:2012-06-11 11:38:26

标签: php arrays postgresql

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

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

但是如何使用pg_insert

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

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

我一直想测试一下,但目前我没有任何PostgreSQL数据库可供测试..

2 个答案:

答案 0 :(得分: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[]并相应地更改了代码 - 我仍然得到相同的结果。

我开始进一步挖掘并在pg_insert pg_query("INSERT INTO...") 上找到以下内容:

  

此功能是实验性的。它的功能是这个功能的行为   名称和周围文档可能会更改,恕不另行通知   PHP的未来版本。使用此功能需要您自担风险。

基本上,它很漂亮,不应该使用。有趣的是,使用

{{1}}

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

答案 1 :(得分: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)