簡體   English   中英

為什么在PostgreSQL上的查詢(在PHP上)返回字符串數組而不是assoc數組?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM