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 和嵌套提取的主要内容,如果未能解决你的问题,请参考以下文章