前提・実現したいこと
フォーム画面から、色やサイズなどの商品情報をチェックボックスで指定(複数可)すると、条件をもとに商品テーブルを絞り込み検索して該当商品を表示する機能をPHPで作成しています。
ユーザーの条件指定に応じてプリペアドステートメントのパラメータ数や内容を変えるにはどうすればいいでしょうか?
発生している問題・エラーメッセージ
ユーザーが選ぶ条件に応じて、IN句のプリペアードステートメントやバインドを動的に指定して実現しようとしました。
参考サイトを見て、WHEREで一つの項目(「ターゲット」)のみ指定しmysqliでSQL文を組み立てると、対象の商品を取得できました。
しかし、「色」や「サイズ」など他の項目も一緒に指定しようとした際、バインドをどう書いたらいいか分からなくなりました。
参考サイト:[PHP] mysqliのbind paramに可変する引数を渡す
・「ターゲット」項目のみ
php
1//$users …チェックボックス「ターゲット」の入力値を格納した配列。 2$sql = "SELECT * FROM clothes WHERE 3 user IN (" . implode(',', array_fill(0, count($users), '?')) . ")"; 4$stmt = $dbh->prepare($sql); 5$stmt->bind_param(str_repeat('s', count($users)), ...$users);
・「色」項目を追加
php
1//$colors…チェックボックス「色」の入力値を格納した配列。 2$sql = "SELECT * FROM clothes WHERE 3 user IN (" . implode(',', array_fill(0, count($users), '?')) . ") AND 4 color IN (" . implode(',', array_fill(0, count($colors), '?')) .")"; //追加 5$stmt = $dbh->prepare($sql); 6$stmt->bind_param(str_repeat('s', count($users)), ...$users); //←78行目でエラー 7$stmt->bind_param(str_repeat('s', count($colors)), ...$colors); //追加
エラーメッセージ
Fatal error: Uncaught Error: Call to a member function bind_param() on bool in C:\xampp\htdocs\clothes\result.php:78 Stack trace: #0 {main} thrown in C:\xampp\htdocs\clothes\result.php on line 78
補足情報(FW/ツールのバージョンなど)
・フォーム画面
・clothesテーブル(MySQL)
※バージョン
mysql Ver 8.0.26、PHP 8.0.11
※ユーザー入力に応じたデータ取得の練習が目的で、セキュリティはあまり重視していません。
回答1件
あなたの回答
tips
プレビュー