0

重複の可能性:
PHP PDO: 配列を IN() 条件にバインドできますか?

わかりました、これは本当に私を悩ませています。PHP の PDO で SQL "IN" ステートメントのパラメーター (複数の値を持つ) をバインドするにはどうすればよいですか?

ここに基本があります...

$allow = "'red', 'blue'";

SELECT * FROM colors WHERE type IN (:allow);

$stmt->bindParam(':allow', $allow);

これは、 $allow を単独でプラグインすると正常に機能しますが、バインドして :allow を使用しようとすると機能しません。これがなぜなのか誰か知っていますか?

注: PDO の残りの部分は、他の変数 (文字列ではない) が機能するように適切に設定されていますが、不要なので含めませんでした。

どんな助けでも大歓迎です、ありがとう。

4

2 に答える 2

4

コメントで deceze が言ったことは正しいです。これは私が以前にこれを行った方法です。

基本的にIN、配列値をループし、バインドされた名前を追加して、SQL 文字列の一部を作成します。

$allow = array( 'red', 'blue' );

$sql = sprintf(
    "Select * from colors where type in ( %s )",
    implode(
        ',',
        array_map(
            function($v) {
                static $x=0;
                return ':allow_'.$x++;
            },
            $allow
        )
    )
);

これにより、Select * from colors where type in ( :allow_0,:allow_1 )

次に、$allow配列をループし、bindValue を使用して各変数をバインドします。

foreach( $allow as $k => $v ){
    $stmnt->bindValue( 'allow_'.$k, $v );
}

同様の例を示した質問にリンクされている deceze を実現する前に、これを追加しました。?s ではなく、名前付きのバインドされた変数を使用してそれを行う方法を示しているため、ここに残しておきます。

于 2012-05-30T01:28:57.190 に答える
0

バインド関数は、複数の個別の値ではなく、リスト全体を文字列として扱います。

于 2012-05-30T01:28:28.603 に答える