【问题标题】:PostgreSQL: Arrays Data Type with PHPPostgreSQL:使用 PHP 的数组数据类型
【发布时间】:2012-04-13 21:49:48
【问题描述】:

我正在使用 PHP 处理 PostgeSQL,我知道 PosrgeSQL 允许将表的列定义为数组。

假设我有一张这样的桌子:

CREATE TABLE sal_emp (
    a            text ARRAY,
    b            text ARRAY,
    c            text ARRAY,
);

这些是我的数组:

$a = array(aa,bb,cc);
$b = array(dd,dd,aa);
$c = array(bb,ff,ee);

我想将它们插入到各自的列中,如下所示:

     a     |     b      |      c     
-----------+------------+------------
{aa,bb,cc} | {dd,dd,aa} |  {bb,ff,ee}

我可以这样插入吗?

$a = implode(',', $a);
$b = implode(',', $b);
$c = implode(',', $c);
$a = array('a' => $a, 'b' => $b, 'c' => $c);
pg_insert($dbconn, 'table', $a);

或者有没有更好的方法来达到同样的效果?

【问题讨论】:

  • 将 PHP 的数组转换为 Postgres 将在查询中接受的字符串表示只是字符串操作的问题:postgresql.org/docs/9.1/static/arrays.html
  • @MarcB 是的,我知道,但我不确定我是否正确,以及是否有更好的方法。我对 PostgreSQL 很陌生..
  • 正确的做法是正确规范您的数据库,并且根本不使用 PostgreSQL 数组。
  • 你可以查一下这个问题stackoverflow.com/questions/3068683/…

标签: php arrays postgresql


【解决方案1】:

您的创建语句有错误。这是正确的:

CREATE TABLE sal_emp (
    a            text ARRAY,
    b            text ARRAY,
    c            text ARRAY
);

如果您要手动插入,您会这样做:

insert into sal_emp (a, b, c) values 
('{"some text"}', '{"some more", "a bit more"}', '{"even more"}');

insert into sal_emp (a, b, c) values 
(array ['some text'], array['some more', 'a bit more'], array['even more']);

所以...我现在无法测试它,但它会是这样的:

$a = "array['" . implode("'],['", $a) . "']";
...
$a = array('a' => $a, 'b' => $b, 'c' => $c);
pg_insert($dbconn, 'table', $a);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    相关资源
    最近更新 更多