[英]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.