PDO和嵌套提取

时间:2009-08-28 16:03:14

标签: php database pdo

让我说我有这样的事情:

$db=new PDO($dsn);

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

while ($result=$statement->fetch())
{
    //do something with $result
}

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

2 个答案:

答案 0 :(得分:2)

我应该能够在你的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个查询而不是几个通常更快。

答案 1 :(得分:0)

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

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