使用PDO返回数组 - 使用FetchAll不起作用

时间:2014-06-29 01:12:17

标签: php sql pdo fetch fetchall

我使用以下代码从我的数据库中检索数据。问题是它只显示第一行。在这种特殊情况下,这意味着网页上只显示第一张图片,但我想要显示所有图片。

<?php 
    $sql = "SELECT `image-id`, `article-id`, `image-path`, `image-title` FROM `table-images` WHERE `article-id` = :id";

    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(":id", $id);
    $stmt->execute();

    if($result = $stmt->fetch(PDO::FETCH_ASSOC))
    {
?>

<a class="swipebox" href="<?php echo $result['image-path'];?>" title="<?php echo $result['image-title'];?>">
<img alt="image" src="<?php echo $result['image-path'];?>"></a>

<?php
    }// end if
    else {
    echo '0 results';
    }// end else
?>

我读了 this article ,所以我尝试使用代码:

if($result = $stmt->fetchAll(PDO::FETCH_ASSOC));?

......但这不起作用。它甚至不再回应第一张照片了。我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

以下是它的工作原理:

$stmt = $pdo->prepare($sql);
$stmt->bindParam(":id", $id);
$success = $stmt->execute();

if($success){
    //fetch here
}

现在您有2个获取数据的选项:

<强>取()

fetch()将逐个获取行,因此您需要一个while循环。

while($rows = $stmt->fetch(PDO::FETCH_ASSOC)){
 // get data
}

<强>使用fetchall()

fetchAll()一次获取所有行,因此无需循环来检索数据,但如果需要循环则需要for循环。

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row){
  //do something
}

答案 1 :(得分:1)

<?php 
    $sql = "Your SQL query";
    $id  = 1; 

    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(":id", $id);
    $stmt->execute();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC)

    if($stmt->rowCount()){

       foreach($result as $row){
         echo $row['row_name'].'<br/>'; 
       }

    }else{
       echo 'No results found'; 
    }