2016-09-29 5 views
1

私はPDOについて次の疑問を持っています:PDOで準備するたびにパラメータをバインドする必要がありますか?

複数のクエリを実行する場合は、prepareを呼び出すたびにbindParamメソッドを使用する必要がありますか?

例:

$connection->prepare("SELECT * FROM table WHERE y = :y"); 
$connection->bindParam(":y", $y); 

$connection->prepare("SELECT * FROM table2 WHERE y = :w"); 
$connection->bindParam(":w", $w); 

OR私は、より良いような何か使用して行うことができます:

$connection->bindParam(":y", $y); 
$connection->bindParam(":w", $w); 

$connection->prepare("SELECT * FROM table WHERE y = :y"); 
$connection->prepare("SELECT * FROM table2 WHERE y = :w"); 

OR:

$connection->prepare("SELECT * FROM table WHERE y = :y"); 
$connection->prepare("SELECT * FROM table2 WHERE y = :w"); 

$connection->bindParam(":y", $y); 
$connection->bindParam(":w", $w); 

¿WICHのため、何可能ですか?もしそれらバインドbind paramsあなたが準備されたステートメントにない接続へので、これは実際に

$connection->bindParam(":w", $w); 

を動作しないでしょうが、その代わりに、あなたがする必要があるだろう

+0

シングル実行ではマルチプルクエリを実行しません。それぞれのクエリが必要であり、paramをバインドし、クエリごとに個別に実行します。 – JYoThI

+0

これらのどれも動作しません。 'prepare'からの戻りは、準備されたステートメントです。 'bindParam'は、*接続*ではなく、*文*に関連付けられたメソッドです。プレースホルダにバインドされた変数の値は、 'execute'メソッドが呼び出されると評価されます。 PDOのドキュメントで例を確認することをお勧めします。 – spencer7593

+0

同じパラメータで複数のクエリを実行する必要がある場合は、データベース設計が間違っている可能性が最も高いことを意味します。すべての類似したデータを1つのテーブルにするだけで、実行するクエリは1つだけ必要になります。 –

答えて

3

$stmt = $connection->prepare("SELECT * FROM table2 WHERE y = :w"); 
$stmt->bindParam(":w", $w); 

どの自動的に各ステートメントに個別にパラメーターをバインドする必要があることを意味します。

関連する問題