什么时候将fetch()与SQL和php一起使用


when do you use fetch() with SQL and php?

我对何时使用fetch()方法和何时不使用感到有点困惑。就像在这种情况下:

为什么我需要这里的fetch()方法:

$query = "SELECT * FROM Idea_Categories WHERE categoryID = $category_id";
$category = $db->query($query);
$category = $category->fetch();
$category_id = $category['categoryID'];
$category_name = $category['categoryName'];

但不在此:

$query = "SELECT * FROM statements WHERE categoryID = $category_id ORDER BY entryID";
$statements = $db->query($query);

我在这里使用$语句,它只列出了我在数据库中的所有语句:

<table>
    <?php foreach ($statements as $statement) :?>
    <tr>
            <td><?php echo $statement['topic']; ?></td>
            <td>
                <form action="delete_line.php" method="post">
                    <input type="hidden" name="topic" value="<?php echo $statement['topic'];?>" /> 
                    <input type="hidden" name="category_id" value="<?php echo $statement['categoryID'];?>" /> 
                    <input type="submit" value="Delete" />
                </form>                          
            </td>
            <td>
                <form action="product_rate.php" method="post">
                    <input type="hidden" name="topic" value="<?php echo $statement['topic'];?>" />
                    <input type="submit" value="Upvote" name="action" />
                </form>
            </td>
            <td>
                <form action="product_rate.php" method="post">
                    <input type="hidden" name="topic" value="<?php echo $statement['topic'];?>" />
                    <input type="submit" value="Downvote" name="action"/>
                </form>
            </td>
    </tr>
    <?php endforeach; ?> 

PDO::query返回一个PDOStatement对象。任何时候使用PDO处理结果集时,都会有这样一个对象。通常你在上面调用PDOStatement::fetch来获得结果,通常是这样的循环:

while ($row = $stmt->fetch()) ...

PDOStatement还实现了Traversable接口,它只允许您做与上面完全相同的事情,但使用foreach:

foreach ($stmt as $row) ...

由于Traversable接口,它只是一个语法糖,您也可以在自己的任何类中实现它。