2013-10-28 19 views
0

我正在研究PHP應用程序,我試圖從名爲articles的表中檢索所有數據以在屏幕上顯示它們。我已插入2個採樣條目,如下:MySQL將奇怪的結果返回給PHP

SQL result 

Host: localhost 
Database: samples 
Generation Time: Oct 28, 2013 at 09:04 PM 
Generated by: phpMyAdmin 4.0.8/MySQL 5.5.30-log 
SQL query: SELECT * FROM `articles` LIMIT 0, 30 ; 
Rows: 2 

article_id article_title article_content article_timestamp 
3 Sample title Text 0 
4 Title Content 1234567 

下面是導致該錯誤的代碼,在那裏小調試打印:

<?php 
class Article { 
    public function fetch_all() { 
     global $pdo; 
     $query = "Select * from articles"; 
     $result = mysql_query($query); 
     $res_array = mysql_fetch_array($result); 
     foreach ($res_array as $x) { 
      echo $x; 
      echo "............"; 
     } 
    } 
}?> 

非但沒有2的條目,我只得到第一個1 ...雙倍。更確切地說:

3 ............ 3 ............樣本標題........... .Sample title ............ Text ............ Text ............ 0 ........ .... 0 ............

我不知道,我在做什麼錯在這裏。有人可以提供一個提示嗎?

+5

如果您使用mysql_ *',那麼$ pdo是什麼? – MahanGM

+0

'mysql_fetch_array'從結果中提取_one_行,使用_both_數字_as_關聯索引。 – Wrikken

+1

使用'mysqli_ *'而不是'mysql_ *'。 'mysql_'語句將在未來被刪除。 – tehX

回答

1

首先,你叫mysql_fetch_array只有一次,這就是爲什麼你要只有一行。您應該循環調用它,直到它返回fale值,即結果集中沒有更多行。

其次,默認情況下,mysql_fetch_array返回hash和array的混合混合,這是一個按列號和列名索引的數組,它解釋了爲什麼值被複制。您可以通過MYSQL_NUM以僅獲取按列號索引的值。

while ($res_array = mysql_fetch_array($result, MYSQL_NUM)) { 
    foreach ($res_array as $x) { 
     echo $x; 
     echo "............"; 
    } 
    echo "\n"; // ??? 
} 
+0

是啊,先前的想法:) 因此,鑑於機會是我得到更奇怪的結果的原因,如果我做echo $ res_array? –

3

這是我在過去的習慣:

<?php 
$result = mysql_query($query); 
while ($row = mysql_fetch_assoc($result)) { 
    foreach ($row as $x) { 
    // ... 
    } 
} 
?> 

這檢索各行依次通過它循環輸出結果。使用mysql_fetch_assoc只返回一個關聯數組,減少數組中的重複值。

+2

將此答案與使用'mysql_fetch_assoc($ result)'或'mysql_fetch_array($ result,MYSQL_ASSOC)'或'mysql_fetch_array($ result,MYSQL_NUM)'組合起來以消除重複的列 –

+0

@MarkBaker我更喜歡使用mysql_fetch_assoc()我自己,但OP是使用mysql_fetch_array。不過,你說得很好。我編輯清楚。 – ahwm

+0

好,我不想在我的情況下重複 –

0

PHP手冊:

mysql_fetch_array(resource $result [, int $result_type = MYSQL_BOTH ])

如果沒有更多的行返回字符串數組對應於提取行,或FALSE。返回數組的類型取決於如何定義result_type。通過使用MYSQL_BOTH(默認),您將得到一個包含關聯和數字索引的數組。使用MYSQL_ASSOC,你只能得到關聯索引(如mysql_fetch_assoc()工作),使用MYSQL_NUM,你只能得到數字索引(如mysql_fetch_row()工作)。

所以,你應該這樣寫:mysql_fetch_array($result, MYSQL_ASSOC)

+0

這將消除重複,但不會返回他的第二個記錄。所以真的只有部分答案。 – ahwm