SELECT 使用時の bindValue の使い方がよくわかりません。
ネットで調べるも、良い結果は得られず。
どのように書くべきなのでしょうか ?
そもそも MYSQL からデータの出力時には bindValue は必要がないのでしょうか ?
大変恐縮ですが、ご教授下さい。
宜しくお願い致します。
( HTML )
<select name="key_01" id="category_type_01">
<option value="0">0</option>
<option value="">すべて</option>
</select>
<select name="key_02" id="category_type_01">
<option value="0">0</option>
<option value="">すべて</option>
</select>
<input type="text" name="key_03" id="category_name">
( PHP )
try {
$pdo = new PDO(DSN, USERNAME, PASSWORD);
// SQL 文を準備
$sql = 'SELECT * FROM movie WHERE (
category_type_01 LIKE "%' . $_REQUEST['key_01'] . '%" AND
category_type_02 LIKE "%' . $_REQUEST['key_02'] . '%" AND
category_name LIKE "%' . $_REQUEST['key_03'] . '%"
)';
$prepare = $pdo->prepare($sql);
$prepare->bindValue(':category_type_01', XXX, PDO::PARAM_INT);
$prepare->bindValue(':category_type_02', XXX, PDO::PARAM_INT);
$prepare->bindValue(':category_name', XXX, PDO::PARAM_STR);
$prepare->execute();
$rows = $prepare->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $i => $row) {
echo $row['category_name'];
}
No.2ベストアンサー
- 回答日時:
おっと、先に絞り込みが必要ですね
if(!empty($key01) and !empty($key02) and !empty($key03)){
$sql = 'SELECT * FROM movie WHERE 1
AND category_type_01 LIKE :key01
AND category_type_02 LIKE :key02
AND category_name LIKE:key03';
$prepare = $pdo->prepare($sql);
$prepare->bindValue(':key01', '%'.$key01.'%', PDO::PARAM_INT);
$prepare->bindValue(':key02', '%'.$key02.'%', PDO::PARAM_INT);
$prepare->bindValue(':key03', '%'.$key03.'%', PDO::PARAM_STR);
$prepare->execute();
}
みたいにするとしないとすべてのkeyに値が入ってないときは弾きます
key01-03のどれかに値がはいってればいいなら
if(!empty($key01) or !empty($key02) or !empty($key03)){
みたいな書き方になります。
No.1
- 回答日時:
流れ的にはこうGETで渡す前提ですがPOSTで渡すならfilter_inputの第一引数は
INPUT_POSTになるので注意
$key01=filter_input(INPUT_GET,"key_01");
$key02=filter_input(INPUT_GET,"key_02");
$key03=filter_input(INPUT_GET,"key_03");
$sql = 'SELECT * FROM movie WHERE 1
AND category_type_01 LIKE :key01
AND category_type_02 LIKE :key02
AND category_name LIKE:key03';
$prepare = $pdo->prepare($sql);
$prepare->bindValue(':key01', '%'.$key01.'%', PDO::PARAM_INT);
$prepare->bindValue(':key02', '%'.$key02.'%', PDO::PARAM_INT);
$prepare->bindValue(':key03', '%'.$key03.'%', PDO::PARAM_STR);
$prepare->execute();
ただ、INT型の要素にLIKE %...%とするのはちょっとありえないです
もう少しきちんと仕様を固めたほうが良いでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPでこのコード自体に意味は無...
-
連想配列のキー値(連番)を基...
-
Excel VBAでフィルター後の対象...
-
PHP、{}記号の意味
-
PHPの構文で間違えが分からない
-
PHPで連想配列のプルダウンメニ...
-
関数をの引数について。
-
リストボックス複数選択抽出方法
-
foreachとかの勝手な省略?
-
プログラミングのPythonのnoteb...
-
スカラーのベクトル微分
-
配列をループでたくさん宣言し...
-
ヒアドキュメントの中のfor文
-
file_existsでファイル名の部分...
-
foreachのなかで次のキーを参照...
-
PHPで多次元配列を一度に処理す...
-
phpの関数について質問です!
-
While文を使って配列の中身を全...
-
配列データのMySQLへの登録
-
phpのin_array()でわからない事...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マッチング処理(1:N)
-
smartyのforeachの使い方
-
foreachで上限回数指定方法また...
-
多次元配列を、1次元の配列にす...
-
foreachの間にテーブルの<TR>を...
-
PHP、{}記号の意味
-
$_POST受信で必要項目のみを結...
-
3つの連想配列を交互に代入し...
-
VB.NET で 二次元のハッシュは...
-
PHP:ツリー構造をulとli要素に...
-
foreachで配列を、左から縦3列...
-
PHPの構文で間違えが分からない
-
PHPで連想配列のプルダウンメニ...
-
添え字が全て文字列のPHPの多次...
-
POSTで渡されるデータの数がわ...
-
テーブルデータ表示
-
Smartyでインクリメント
-
PHPで変数名にハイフンを使うに...
-
Delphi XEの警告文を消したい
-
配列から順位を算出したい
おすすめ情報
filter_input 便利ですね、ありがとうございます。
なぜか、絞り込まれず、全件出力されるようになってしまいました。
また、SQL 文の LIKE :key01 の意味が調べはしたのですが、わからずでした。
LIKE "%' . $key03. '%" だと検索しているのはわかるのですが。