WEBページ上の入力欄に商品名を入力して、商品を検索する機能を作成する。
SQLを使って商品名で商品を検索してみよう
phpMyAdminから左端の「shop」データベースを指定して、上側のSQLタブを選択します。
select * from product where name=’ 卵 ‘;
と入力して下側の実行をクリックします。すると・・・
データベースから「卵」の情報が検索できました。
検索には、「where 列名=’検索キーワード’;」を入力すれば大丈夫です。
入力画面を作って商品名で商品を検索してみよう
まずは簡単なフォームを作りましょう。htdocsファイル内に下記ファイルを作成します。
search-input.php
<?php require ‘header.php’; ?> 商品名を入力してください。 <form action=”search-output.php” method=”post”> <input type=”text” name=”keyword”> <input type=”submit” value=”検索”> </form> <?php require ‘footer.php’; ?> | 「action=”search-output.php」にて出力用スクリプトに渡します。 |
入力画面が作れました。それでは次に、フォームで入力された検索キーワードを使って、商品を検索するPHPスクリプトを作成していきます。
search-output.php
<?php require ‘header.php’; ?> <table> <tr><th>商品番号</th><th>商品名</th><th>値段</th></tr> <?php $pdo = new PDO(‘mysql:host=localhost;dbname=shop; charset=utf8′,’staff’,’password’); $sql = $pdo->prepare(‘select * from product where name=?’); $sql->execute([$_REQUEST[‘keyword’]]); foreach ($sql as $row){ echo ‘<tr>’; echo ‘<td>’, $row[‘id’], ‘</td>’; echo ‘<td>’, $row[‘name’], ‘</td>’; echo ‘<td>’, $row[‘price’], ‘</td>’; echo ‘</td>’; echo “\n”; } ?> </table> <?php require ‘footer.php’; ?> | 商品を検索するためには、prepareメソッドとexecuteメソッドを使います。 「prepareメソッド」 SQL文を実行する準備を行います。引数にはSQL文を文字列で指定します。 「?」の部分には後から好きな値を設定できます。 「executeメソッド」 SQL[文の実行を行います。 引数にはSQL文のなかの「?」部分に設定する値を、配列にして渡します。配列にするのは、1つのSQL文ないに複数個所の?を配置することができるからです。 |
SQL文を使って部分一致で商品を検索する
productテーブルにあるデータベースの中で「ラーメン」で一致する部分を検索して抽出できるようにしましょう。
SQLタグにて「SELECT * FROM product
WHERE name LIKE ‘%ラーメン%’;」を入力し下にスクロールして「実行」をクリックします。
like演算子を使って、次のようなwhere句を使うと、name列に保存された商品名に「ラーメン」という文字を含む全ての商品を検索することができます。
「検索」タグを使って調べる
下記のようなデータがあったとします。ここから「ナッツ」という文字を含む商品を検索してみましょう。
検索タグをクリックし、演算子から「LIKE%…%」を選択し、値に「ナッツ」と入力します。そして実行。
すると、3件が検索されました。
入力フォームから部分一致で商品を検索する
次はフォーム入力欄で入力された検索キーワードが含まれている商品名を検索するPHPスクリプトを作成してみましょう。
search-output2.php
<?php require ‘header.php’; ?> <table> <tr><th>商品番号</th><th>商品名</th><th>値段</th></tr> <?php $pdo = new PDO(‘mysql:host=localhost;dbname=shop; charset=utf8′,’staff’,’password’); $sql = $pdo->prepare(‘select * from product where name like ?’); $sql->execute([‘%’.$_REQUEST[‘keyword’].’%’]); foreach ($sql as $row) { echo ‘<tr>’; echo ‘<td>’, $row[‘id’], ‘</td>’; echo ‘<td>’, $row[‘name’], ‘</td>’; echo ‘<td>’, $row[‘price’], ‘</td>’; echo ‘</td>’; echo “\n”; } ?> </table> <?php require ‘footer.php’; ?> | likeの後は、入力した値が指定できるように「?」にしておきます。 ?の部分に渡す文字列は、%ラーメン%のように両方に書く必要があります。 文字列の結合演算子「.」(ドット)を使います。 |
キーワードを含まない商品名の検索
上記とは逆にキーワードを含まない商品を検索する機能にするにはlike演算子の前にnotをつけて「not like」とします。 select * from product where name not like ‘%ラーメン%’; のように書きます。
andを使って条件を増やす方法
例えば「ラーメン」は含むが、「みそ」は含まない。こんな条件にしたい場合は、
select * from product where name like ‘%ラーメン%’ and name not like ‘%みそ%’;
と書きます。