我对何时使用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
接口,它只是一个语法糖,您也可以在自己的任何类中实现它。