让我说我有这样的事情:
$db=new PDO($dsn);
$statement=$db->query('Select * from foo');
while ($result=$statement->fetch())
{
//do something with $result
}
如何在while循环中放入另一个查询?即使我创建了一个新的PDOStatement对象,它似乎会覆盖最顶层PDO语句的游标。我看到的唯一其他解决方案是:a)立即获取整个外部循环或b)打开与数据库的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数组。