QA@IT
«回答へ戻る

回答を投稿

抽出という表現がわからないですが、
PDOかなにかで パラメータをバインドしていて
INの中の一つのパラメータ( ? )に配列が自動的に展開されてバインドされてほしいということですかね?

そうであれば、そういう事は出来なかったように思います。
?の方を$arrvalの要素の数に合わせて用意するしかなかったかと。

$where = $GET['product_id'].'!= T1.product_id and T2.delflg = 0 and T1.class IN ( ? , ? , ? )';

に対してであれば

$arrval = Array("Aコース" , "aコース" , "A course");

をバインドできると思います。(実際にバインドしているコードがないのでそのままうまくいくかはわかりませんが)
条件によって$arrvalの要素の数が変わるのであれば、それに合わせて$whereのINの中身を変える必要があります。
単純にはfor文などを使って。
implodeとかstr_repeatを使って工夫することもできるとは思いますが、まずは単純に実現させてみてから改善すればいいでしょう。

なお、Array(Aコース)という書き方をした場合、phpでは Aコースが定数や予約語ではないので自動的に文字列に変換されますが、逆に言えば定数が存在した場合に予期せぬ結果を生むことがありますので、
「Aコース」という文字を設定したいのであれば Array("Aコース")Array('Aコース') のように引用符でくくった方がよいでしょう。なお単一引用符と二重引用符も振る舞いに少し違いがあります。
※ご自分で区別して使っている場合はその限りではありません。

抽出という表現がわからないですが、
PDOかなにかで パラメータをバインドしていて
INの中の一つのパラメータ( ? )に配列が自動的に展開されてバインドされてほしいということですかね?

そうであれば、そういう事は出来なかったように思います。
?の方を$arrvalの要素の数に合わせて用意するしかなかったかと。

```php
$where = $GET['product_id'].'!= T1.product_id and T2.delflg = 0 and T1.class IN ( ? , ? , ? )';
```

に対してであれば
```php
$arrval = Array("Aコース" , "aコース" , "A course");
```

をバインドできると思います。(実際にバインドしているコードがないのでそのままうまくいくかはわかりませんが)
条件によって$arrvalの要素の数が変わるのであれば、それに合わせて$whereのINの中身を変える必要があります。
単純にはfor文などを使って。
implodeとかstr_repeatを使って工夫することもできるとは思いますが、まずは単純に実現させてみてから改善すればいいでしょう。

なお、`Array(Aコース)`という書き方をした場合、phpでは `Aコース`が定数や予約語ではないので自動的に文字列に変換されますが、逆に言えば定数が存在した場合に予期せぬ結果を生むことがありますので、
「Aコース」という文字を設定したいのであれば `Array("Aコース")`や`Array('Aコース')` のように引用符でくくった方がよいでしょう。なお単一引用符と二重引用符も振る舞いに少し違いがあります。
※ご自分で区別して使っている場合はその限りではありません。