2012-01-22 16 views
0

私は自分のサイトにPDOを実装しようとしていますが、準備されたステートメントを複数回実行できるかどうか疑問に思っていましたか?pdo preparedステートメント複数実行?

$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ループは1回しか起こらなかった。

ので、これを回避するために、あなたは配列に最初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ループで使用することが可能です。

しかし、言ったことすべてで、私はあなたがおそらくこのようにそれをループを必要とせずに1つのSQLクエリにすべてを取得することができ、強力な予感を持っています。

+2

まあまあです。 –

3

はい、可能です。一度準備し、必要な回数だけ実行します。もちろん

、私はなぜあなたは、ループ内のSELECTをやっているかわからない...という一般的にあまり意味がありません。

+0

データベースを取得するにはどうすればよいですか?私は、mysql_query( "SELECT ... – hellomello

+0

@andrewliuの古いメソッドで作業していましたが、何を求めているのかはっきりしていません。なぜ、一度選択して結果データをループしないのですか?何度も何度もセレクトしていますか? – Brad

関連する問題