質問失礼します。
現在PDOでIN句を使いたく色々なページを見てIN句の使い方がなんとか分かりまいた。
しかし、bindvalueを組み合わせるとエラーが発生します。
コードは下記になります。
$year = '2021'; $flug = [NULL,1,2,3,4]; $inClause = substr(str_repeat(',?', count($flug)), 1); $statement = $dbh->prepare("SELECT id FROM sample_tbl WHERE year = :year AND flug IN ({$inClause})"); $statement -> bindValue(':year', $year, PDO::PARAM_STR); $statement -> execute($flug);
例えばですがbindValueは使用せずyear = '2021'とした場合にはエラーはでません。
表示されるエラーは下記になります。
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters in C:\xampp\htdocs\test\test.php:73 Stack trace: #0 C:\xampp\htdocs\test\test.php(73): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\test\test.php on line 73
解決方法や参考になるページ等ご教授いただけますと幸いです。
よろしくお願いいたします。
【追記】
皆様から得た回答で下記にて実行できましたがおかしい部分はありますでしょうか?
$year = 2021; $flug = [1,2,3,4]; $inClause = substr(str_repeat(',?', count($flug)), 1); $statement = $dbh->prepare("SELECT id FROM sample_tbl WHERE year = ? AND flug IN ({$inClause})"); $in_array = array($year); for($i = 0; $i < count($flug); $i++){ array_push($in_array,$flug[$i]); } $statement -> execute($in_array);
INでNULLは拾えないとのご指摘をいただいたため一旦NULLは省いています。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/15 09:17
退会済みユーザー
2021/11/15 09:21