PDO 和嵌套提取

Posted

技术标签:

【中文标题】PDO 和嵌套提取【英文标题】:PDO and nested fetching 【发布时间】:2010-11-23 19:02:58 【问题描述】:

假设我有这样的事情:

$db=new PDO($dsn);

$statement=$db->query('Select * from foo');

while ($result=$statement->fetch())

    //do something with $result

如何在该 while 循环中放置另一个查询?即使我创建了一个新的 PDOStatement 对象,它似乎也会覆盖最顶层 PDO 语句的光标。我看到的唯一其他解决方案是a)一次获取整个外循环或b)打开2个不同的数据库连接。这些似乎都不是一个好主意,还有其他解决方案吗?

【问题讨论】:

【参考方案1】:

您应该能够在您的 while 循环中执行任何其他查询,我会说;像这样:

$db=new PDO($dsn);

$statement=$db->query('Select * from foo');

while ($result=$statement->fetch())

    $statement2 = $db->query('Select * from bar');
    while ($result2=$statement2->fetch()) 
        // use result2
    

你试过了吗?它应该工作......

不过,如果可以(我的意思是,如果您的数据没问题的话),使用 JOIN 只执行一个查询可能会更好地提高性能:1 个查询而不是多个查询通常更快。

【讨论】:

这解释了 ^^ 感谢您告诉问题是什么,仍然!【参考方案2】:

听起来您想要完成的是为您正在查看的记录获取相关数据,为什么不在第一个查询中加入它们呢?数据库将比任何数量的代码都更擅长在内部连接点。

但要回答您的问题,我认为打开另一个连接到同一个 DSN 并没有什么害处,最有可能发生的事情是您得到另一个指向同一个实际连接的 PDO 对象实例。此外,但根据您期望的数据量,您可以只 fetchAll 并循环遍历 php 数组。

【讨论】:

以上是关于PDO 和嵌套提取的主要内容,如果未能解决你的问题,请参考以下文章

PDO MYSQL 嵌套的 COUNT 中断了我的查询

提取嵌套字典和列表中的叶值集,不包括无

如何从 BigQuery 中提取嵌套数据?

MySQL 嵌套 JSON 列搜索和提取子 JSON

从 UDF 内的 Spark SQL 行中提取嵌套数组

使用 Python 将 zip 文件和嵌套的 zip 文件提取到目标目录中