2011-08-15 6 views
2

が、これはPDOで、私はこれを行うにはどうすればよいのために...適切な形式は、/ NOT INは明らかであろう理由から

検索する殺人で照会します。

SELECT thing FROM things WHERE thing_uid IN (...) 

マイ特定のユースケースは、数十のチェックボックスを持つフォームから取得した配列を展開して作成された文字列です。標準のMySQLでは、これは...

$thingString = implode("', '", $thingArray); 
$q = "SELECT thing FROM things WHERE thing_uid IN ('$thingString')"; 

非常に簡単ですが、私はそれはPDOの抗注入保護の恩恵を受けたい...バインドのparamsとすべてのこと。それでどうすればいい?

+1

@Kris質問はテーブル名のバインドについては何も言いません。これは、IN()クエリでプレースホルダーの数を変えることです。 –

+0

クリス私が何を言っているのかわからない – Drew

答えて

6

?の値の配列を作成し、それをクエリにスローします。

$placeholders = array_fill(0, count($thingArray), '?'); 
$sql = "SELECT thing FROM things WHERE thing_uid IN (" . implode(',', $placeholders) . ")"; 
+2

['array_fill()'](http://php.net/manual/en/function.array-fill.php) – Phil

+2

を使うこともできますプレースホルダー**?**は私のパラメーターと同じで、 '$ stmt-> execute($ thingArray);'と私は行こうと思います、正しい? (現時点ではテストできないので、私は尋ねています) – Drew

+1

@Andrewはい、それは動作します –

関連する問題