2015-10-11 25 views
-1

我試圖做一個簡單的foreach循環,但它只打印出一行,而不是db中的兩行(我試圖把其他行放在db中,但得到了只有第一個,我找不到錯誤。PHP簡單的foreach循環不起作用

try { 
    $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password); 

    $sql = "SELECT flyer_url FROM films LIMIT 30"; 

    $films = $dbh->query($sql); 

    $result = $films->fetch(PDO::FETCH_ASSOC); 

    foreach($result as $row) { 

     print "<img src='" . $row . "' style='width:200px;'>" ; 

    } 

    $dbh = null; 
} 
catch (PDOexception $e) { 
    echo "Error: " . $e-> etmessage() . '<br/>Contact the System Administrator.'; 
} 

假設DB的conf數據在config.php文件,它的成功加載。

我試圖建立個人膜DB和顯示每部電影的海報。

+1

我想你需要使用fetchAll而不是fetch:http://php.net/manual/en/pdostatement.fetchall.php – Melvin

回答

2

fetch返回單行,你的情況 - 表示爲關聯數組。爲了讓所有的行,你就必須繼續遍歷fetch的結果:

while($row = $films->fetch(PDO::FETCH_ASSOC)) { 
    print "<img src='" . $row['flyer_url'] . "' style='width:200px;'>" ; 
} 
+0

不是fetchAll更快,因爲它在每次迭代時都會執行一次數據庫查詢? – Melvin

+1

非常感謝,它的工作! – AndreaEM

+1

@Melvin'fetchAll'是一個可怕的函數。通過'fetch',您允許PDO一次控制其內部緩衝區有多少行。 'fetchAll'強制PDO將它們全部同時使用,可能會導致應用程序崩潰,因爲它佔用太多內存。 – Mureinik

3

更改

$result = $films->fetch(PDO::FETCH_ASSOC); 

$result = $films->fetchAll(PDO::FETCH_ASSOC); 
1

你爲什麼不喜歡做這 -

$data=""; 
foreach($result as $row) { 
$data .= "<img src='" . $row['flyer_url'] . "' style='width:200px;'>" ; 
} 

這將串連字符串和意志給你在foreach循環以外的結果。

+0

不適用於pdo數據庫交互。僅適用於核心mysql處理。 – John