2009-08-28 86 views
1

比方說,我有這樣的事情: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

您應該可以在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

我很蠢。我在我的內部循環中覆蓋$語句。 – ryeguy 2009-08-28 16:25:29

+2

這說明了^^謝謝你告訴問題是什麼,依然! – 2009-08-28 16:26:02

0

聽起來像你正試圖完成的是獲取你正在查看的記錄的相關數據,爲什麼不只是在第一個查詢中加入它們呢?數據庫在內部連接點比任何數量的代碼都可以在外部做得更好。

但是,爲了回答你的問題,我沒有看到在打開相同的DSN另一個連接的危害,發生最有可能的是,你得到指向同一實際連接的PDO對象的另一個實例。此外,但取決於您期望的數據量,您可以只讀取並遍歷php數組。