2009-09-21 8 views
30

私は実際に私のアプリケーションでPDOと準備文を使用すべきだと言われました。利点を理解していますが、私はワークフローにどのように実装するのかを理解するのには苦労しています。コードをもっときれいにするという事実を別にすれば、準備された文をすべて格納する特定のデータベースクラスを用意する必要がありますか、クエリを実行するたびに作成する必要がありますか?標準のPDOクエリを使用する必要があるときと、準備されたステートメントを使用するときを理解することは非常に難しいと思っています。すべての例、ヒント、またはチュートリアルのリンクは非常に高く評価されます。PHP PDO準備文

答えて

31

pdo::prepare()のドキュメントには、2つの素晴らしい例があります。

ここにそれらを含めて少し簡略化しました。

これは?パラメータを使用します。 $dbhは、基本的にPDOオブジェクトです。そして、あなたがしているのは、それぞれ最初の疑問符と二番目の疑問符に値150'red'を入れることです。

/* Execute a prepared statement by passing an array of values */ 
$sth = $dbh->prepare('SELECT name, colour, calories 
         FROM fruit 
         WHERE calories < ? AND colour = ?'); 

$sth->execute(array(150, 'red')); 

$red = $sth->fetchAll(); 

これは名前付きパラメータを使用していますが、もう少し複雑です。

/* Execute a prepared statement by passing an array of values */ 
$sql = 'SELECT name, colour, calories 
     FROM fruit 
     WHERE calories < :calories AND colour = :colour'; 

$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); 
$sth->execute(array(':calories' => 150, ':colour' => 'red')); 

$red = $sth->fetchAll(); 
+1

あなたの2つの例では、もう一方は良いですか? – JasonDavis

+0

単純なクエリの場合、?結構です。しかし、準備されたステートメントはすべての値の周りに引用符を追加することに注意してください。 2番目の例では、1つの値が数値で、もう1つの値が文字列であることを示しています。 (ここには表示されていませんが) –

+0

同じ値を複数回使用する場合は、名前付きパラメータを使用する必要があります。これは、?を使用すると、表示される順序で挿入されるだけなのでです。名前付きパラメーターを使用した場合、それらを複数回使用することができます。 ?は簡単なクエリのための凝縮されたバージョンです。 1つは、他の方法で他のものより有利ではありません。 – BraedenP