【问题标题】:Busy PHP connection to MYSQL?繁忙的 PHP 连接到 MYSQL?
【发布时间】: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


    【解决方案1】:

    这是一个 PDO 行为将取决于您使用的数据库和 PDO 驱动程序实现的区域。当您仍在获取 select 语句 or you might not 的结果时,您也许可以执行新查询。

    一般来说,使用 PDO 连接最安全和最兼容的方式是:

    1. 执行您的 SELECT 语句
    2. 获取您需要的所有行
    3. 关闭光标(如:$pds1-&gt;closeCursor()
    4. 执行下一个查询

    【讨论】:

      猜你喜欢
      • 2015-01-31
      • 2013-07-28
      • 1970-01-01
      • 2013-06-17
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多