[英]Why a query on PostgreSQL (on PHP) return an array of strings instead of an assoc array?
这是一个非常常见的操作,但是我不知道为什么要返回一个字符串数组。
$res=$queryHelper->ExecuteQuery("
SELECT (food.id,stores.name)
FROM food, stores
WHERE food.id_stores=stores.id");
QueryHelper类
public function ExecuteQuery($queryRec,$executeRec=array())
{
$sql = $this->db->prepare($queryRec);
$sql->execute($executeRec);
$this->res=$sql->fetchAll();
return $this->res;
}
餐桌食物
id| name | id_stores
0 | PASTA | 0
1 | FISH | 0
表存储
id |name
0 | MARKET0
1 | MARKET1
$ res是
Array ( [0] => Array ( [row] => (0,MARKET0) ) [1] => Array ( [row] => (1,MARKET0) ) )
但我希望
Array ( [0] => Array ( [0] => (0), [1] => ["MARKET0"] ) [1] => Array ([0] => (1), [1] => ["MARKET0"] ) )
或类似的东西。
如果查询中只有一个表,则一切正常。
SELECT中的括号:
SELECT (food.id,stores.name)
实际上是在构造ROW类型,因此查询的每一行都有一个单独的列,其中包含带有两个值的ROW。 您可以想到您的查询产生了一个行数组,并且您得到的东西看起来像这样:
[
[ [ food.id, stores.name ] ],
...
]
当您期望:
[
[ food.id, stores.name ],
...
]
解决方案是扔掉括号:
SELECT food.id,stores.name
FROM food, stores
WHERE food.id_stores=stores.id
此行为可能有点奇怪,但已记录在案 :
4.2.13。 行构造器
行构造函数是一个表达式,它使用其成员字段的值来构建行值(也称为复合值)。 行构造函数由关键字
ROW
,左括号,行字段值的零个或多个表达式(用逗号分隔)以及最后一个右括号组成。 例如:SELECT ROW(1,2.5,'this is a test');
当列表中有多个表达式时,关键字
ROW
是可选的。
强调我的。 您的列表中有两个表达式,因此(food.id, stores.name)
即使(food.id)
和food.id
是等效的,但(food.id, stores.name)
和food.id, stores.name
是不同的东西(但row(food.id)
会会有所不同)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.