【发布时间】:2012-11-03 05:13:30
【问题描述】:
这是一部分
PHP & MySQL Novice to Ninja, 5th EditionKevin 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) 中:
我的问题是为什么我可以在我的 PHP 代码中使用一个或多个 PDOStatement result sets 时执行 MYSQL 语句?
甚至我可以deleteresult 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']);
?>
【问题讨论】:
标签: php mysql pdo pdostatement