LoginSignup
5
6

More than 3 years have passed since last update.

formタグを使った名前検索機能ーPHP

Posted at

formタグを使った検索機能ーPHP

データベースに保存されているものをformタグを使用して検索する方法。
inputタグに入力された文字列を指定しているテーブルのカラムに対して検索をかけ、一致するものを表示させる。
今回は部分一致での検索。

例)
・田中
・佐藤
・鈴木
・木村

「木」という文字列を検索したときの結果は
「鈴木」「木村」が結果として返ってくる。

その他前方一致、後方一致、完全一致に関しては下記記事参考
https://alunote.hatenablog.com/entry/2018/09/12/143652

通常部分一致をの検索をかける際は下記の書き方で実行できる。

$search = $_GET['search'];
$sql = "SELECT * FROM users WHERE name LIKE '%$search%'";

この場合、「%」を入れて検索した場合、全件取得される。
文字列として「%」を含むものを検索できなくなってしまっている・
「%」も文字として検索するためにエスケープする必要がある。

select.php
<?php
$dbh = new PDO('mysql:host=localhost; dbname=xxxxxx; charset=utf8;', 'xxxxxx', 'xxxxxx');
$search = addslashes($_GET['search']);
//検索された文字列の前にバックスラッシュを入れてエスケープする
$sql = "SELECT * FROM 'テーブル名' WHERE 'カラム名' LIKE :search";
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':search', '%' . addcslashes($search, '\_%') . '%', PDO::PARAM_STR);
//addcslashesの第二引数にエスケープの対象となる(バックスラッシュを入れる)文字列を入れる
$stmt->execute();
?>

addslashes関数

エスケープすべき文字の前にバックスラッシュを付けて返します。 エスケープすべき文字とは、シングルクォート('), ダブルクォート("),バックスラッシュ () ,NUL (NULL バイト) です。

addcslashes関数
第一引数にエスケープしたい文字列、第二引数にエスケープの対象となる文字列を入れる。

この方法で例えばデータベースに「%」や「_」を含むデータがあったとしても文字列を認識して検索することができる。

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6