PHP & MySQL Novice to Ninja, 5th Edition
这是一部分
Kevin Yank
通常,当我们执行 SELECT 查询时,我们使用 while 循环或 foreach 循环的条件来检索结果的每一行,一次一个:
while ($row = $result->fetch()) foreach ($result as $row)
当我们以这种方式处理查询结果时,PHP 实际上会在循环请求时从数据库中检索每一行,并在它移动到下一行时将其丢弃。这使 PHP 不必使用大量内存来一次保存所有结果行。
大多数时候,我们开发人员不需要知道 PHP 正在走这条聪明的捷径。但是每隔一段时间,我们会想在处理完前一个查询的所有结果之前向 MySQL 服务器发送另一个 SQL 查询。
如果我们不小心的话,这正是这段代码中即将发生的事情:我们刚刚运行了一个 SELECT 查询来询问属于特定作者的所有笑话的列表,当我们处理这个列表时,我们想为每一个执行一个 DELETE 查询。问题是,据 MySQL 所知,它仍然会忙着向我们发送 SELECT 查询的结果;我们不能只是打断它并要求它开始运行 DELETE!这样做会导致我们的 DELETE 失败并出现错误。
这就是 fetchAll 方法的用武之地。通过在准备好的语句 ($s) 上调用此方法,我们要求 PHP 检索查询的整个结果集并将它们存储在 PHP 数组 ($result) 中:
我的问题是为什么我可以PDOStatement
result sets
在我的 PHP 代码中使用一个或多个语句时执行 MYSQL 语句?甚至我可以delete
在这些行中引用所有行result sets
<?php
include_once $_SERVER["DOCUMENT_ROOT"] . '/DBconnection.inc.php';
$pds1 = $dbi->query("SELECT name FROM tbl1");
$row = $pds1->fetch();
var_dump($row['name']);
$pds2 = $dbi->query("SELECT user FROM tbl2");
$row = $pds2->fetch();
var_dump($row['user']);
$row = $pds1->fetch();
var_dump($row['name']);
$row = $pds2->fetch();
var_dump($row['user']);
$pds3= $dbi->prepare("DELETE FROM tbl1;");
$pds3->execute();
$row = $pds1->fetch();
var_dump($row['name']);
$row = $pds2->fetch();
var_dump($row['user']);
?>