データの検索

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文ないに複数個所の?を配置することができるからです。








注意!PHPプログラム最後の「;」を忘れずに!エラーになります。

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 ‘%みそ%’;

と書きます。

PHPについて

この本から引用、参考にして学び、完成させることができました。しかし、ここではプログラミング初心者の私が詳しく解説することは、おこがましく、難しく出来ません(ToT)
その点、この本では丁寧な解説が載っていますので、解説とともにコードを書き、完成させればより深く学ぶことができます(^.^)、実際、初心者の私でもわかりやすかったです。身に付け消えないスキルが3,000円弱ならコスパよく、買っておいてよかったと満足してます。


短期間でのレベルアップにはプロから学ぶのもありです。

キャリアアップに必要なスキルを取得しよう。

オンラインで受講ができるスクールですので、全国どこからでも。

就職・転職支援