2013-02-05 32 views
2

我exeriencing與pg_fetch_all一個奇怪的問題(postgresql):它永遠不會返回我更棕褐色2列PHP的PostgreSQL pg_fetch_all

對於爲例,此代碼:

$dbh = pg_connect("host=localhost dbname=dbname user=user password=passwd"); 
    $query = "SELECT m.id, v.nom, v.id FROM machine m, version v WHERE m.id_version = v.id;"; 
    $result = pg_query($dbh, $query); 
    $array = pg_fetch_all($result); 
    print_r($array); 

只打印我m.idv.nom

如果我在pg_my_admin中粘貼完全相同的SQL請求,則返回每個colomn。

如果我分析我的結果作爲

$array = array(); 
    while ($row = pg_fetch_row($result)) { 
     $array[] = $row; 
    } 

它完美的作品。爲什麼?

+0

考慮使用PDO(http://php.net/manual/en/book.pdo.php)進行數據庫事務,而不是使PostgreSQL成爲應用程序的依賴項。 PDO允許您在不需要修改應用程序的情況下交換數據庫。 –

+0

謝謝。我正在使用伊甸園php工具包,它使用PDO處理數據庫內容。 http://www.eden-php.com/ – Martin

+0

PDO允許使用相同的函數集來訪問數據庫,但絕不會阻止開發人員使用供應商專有的SQL來編寫僅與其數據庫一起工作的應用程序。所以說PDO允許你用相同的代碼切換數據庫是不正確的。 – greg

回答

4

這是因爲你有兩個同名的列(在兩個不同的表中)。您需要使用這樣一個別名:

$query = "SELECT m.id AS mId, v.nom, v.id AS vId FROM machine m, version v WHERE m.id_version = v.id;"; 

然後,您將能夠與名稱mIdv.id名爲vId 您可以在SQL here

找到有關別名的詳細信息檢索列 m.id

它與pg_fetch_row()一起使用的原因是因爲這個返回的結果是基於查詢中列的索引而不是關聯數組。

+0

太棒了!非常感謝。 – Martin

+0

@Martin>很高興我能幫上忙。當您需要檢索值時,在SQL查詢中使用ALIAS是個好習慣,尤其是當您連接表時。不要忘記接受答案! – koopajah