それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

phpのPDOのPrepareの課題

prepare では in(:list)とできない 。PHPのPDOでbindParamした時に、INの場合は複数値を配列で渡せない。

PDOStatement::execute() をコールする際には、 文に渡すパラメータにはそれぞれ固有のパラメータマークを設定する必要があります。 ひとつのプリペアドステートメントの中で、同じ名前のパラメータマークを 複数使用することはできません。SQL 文の IN() 句などで、 ひとつのパラメータに複数の値を 割り当てることはできません。


というわけで where in ( :list )

という書き方ができないです。

そこでどうするのか?

<?php
        $SQL = "$SQL where ".implode(' AND ' , $conds);
                  $conds[] = " id in ( ".
                  implode(",", array_map( create_function('$v','return "?";'),$id_list ) ).
                  " ) “;


とやる、これしか無い。配列の中身をまとめてBindするしかないんですよねえ