2012-01-22 78 views
0

我只是在我的網站上實現PDO,但我想知道是否可以多次執行預準備語句?pdo準備好聲明多次執行?

$SQL = $dbh->prepare("SELECT * FROM user WHERE id=? AND users=?"); 
$SQL -> execute(array($id,$userid)); 
while($check = $SQL -> fetchObject()){ 

,然後我會用while循環這個SQL

我可以使用相同的SQL $在while循環中的另一個執行?所以我不必再次輸入準備好的聲明?

$SQL -> execute(array($id2,$userid2)); 
while($check2 = $SQL ->fetchObject(){ 
//while loops for second execution, but I'm not sure how it works cause 
//its using the same $SQL? 
    } 
    }//this end bracket is for the first while loop 

回答

3

是的,你可以重複使用相同的準備好的語句,但不是你在問題中如何使用它。你所要做的本質是一樣的這樣做:

for ($i=0; $i<$some_number; $i++) { 
    echo $i."\n"; 
    for ($i=0; $i<$some_number; $i++) { 
     // do something 
    } 
} 

的第二for循環移動相同的指針作爲原單,等於是從上面的將僅僅是「0」指示輸出原始for循環只發生一次。

因此,爲了解決這個問題,您需要將第一個execute的結果存儲到數組中,然後遍歷它。這樣,你將不必擔心任何指針

$SQL = $dbh->prepare("SELECT * FROM user WHERE id=? AND users=?"); 
$SQL->execute(array($id,$userid)); 
$checks = $SQL->fetchAll(); 
foreach ($checks as $check) { 
    $SQL->execute(array($id2,$userid2)); 
    while ($check2 = $SQL->fetchObject(){ 
     //while loops for second execution 
    } 
} 

這樣,您正在使用完全相同的準備語句(這是很好)和原$check變量可在while循環使用。然而,儘管如此,我有一個強烈的預感,你可以將所有東西都放到一個單獨的SQL查詢中,而不需要像這樣循環。

+2

最後一個理智的答案。 –

3

是的,這是可能的。準備一次,根據需要執行多次。

當然,我不確定你爲什麼要在一個循環中做一個SELECT ......通常沒什麼意義。

+0

我該怎麼做才能得到數據庫?我不確定,我曾經使用mysql_query的舊方法(「SELECT ... – hellomello

+0

@andrewliu,目前還不清楚你在問什麼,爲什麼不選擇一次並遍歷結果數據? SELECT'一遍又一遍? – Brad