
PHPの勉強をしています。
簡単なPHPを作成し、MySQLからデータを持ってきたいのですが、
上手くいきません。
完全一致で入力すれば、該当するものがヒットしますが、部分一致となると何も表示されなくなってしまいます。
検索文字列 = 山田太郎 →検索OK
検索文字列 = 山田 →検索NG
となります。
山田と入力すれば、該当するデータを全て表示するにはどうすればいいのでしょうか。
宜しくお願いします。
//名前
if(!empty($name)) {
$name = addslashes($name);
$where = "name = '$name' && ";
} else if(preg_match("/^(?!ab$)[a-z0-9]+$/", $name)) {
$name = addslashes($name);
$where = "name = '$name' && ";
}
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>インデックスを付けて、検索スピードを早くする方法はあるのでしょうか。
厳密にいうとない事はないです。
たとえば全文検索やキーワードを別テーブルに保存するなど
また1万件前後であればMyISAMで処理すれば気にならないスピードかもしれません。
SQLのLIKE検索も、前方一致もしくは後方一致のどちらかだけなら
インデックスが有効です。
いずれにしろ特定の文字が現れるをチェックするというのは
SQLの得意分野ではありませんので、そういうものだと割り切って管理するしかありません
No.3
- 回答日時:
>以下のようにしてみたのですが、検索がヒットしません。
(略)
>$where = "SELECT * FROM name WHERE name LIKE %$name% && ";
書くとしたら、likeのあとは文字列なんだから単引用符で括って
$where = "SELECT * FROM `name` WHERE (`name` LIKE '%$name%')";
(and は次の条件を付加するときに追加した方がベター)
じゃないんですかねぇ。それ以前にaddslashesというのはどういう意図なのか・・・。MySQL関数ならmysql_real_escape_stringを使うべき。
まぁそれ以前にMySQL関数自体が非推奨なんだから、プリペアドステートメント(が利用できるPDOなど)を使って
$where = "SELECT * FROM `name` WHERE (`name` LIKE ? )";
としてからbindParamで$nameを渡せばいいと思う。
No.1
- 回答日時:
SQLで部分一致検索をする場合は like 句を使用します。
select ・・・・・・ where name like '%山田%';
といった感じで検索すると部分一致になります。
この回答への補足
以下のようにしてみたのですが、検索がヒットしません。
どこが違うのでしょうか。宜しくお願いします。
if(!empty($name)) {
$name = addslashes($name);
$where = "SELECT * FROM name WHERE name LIKE %$name% && ";
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Flaskでサーバー立ち上げに関して
-
PHP5でsimple_xml_load_fileす...
-
Smartyのforeachのnameに変数を...
-
sqlite文字列を格納、出力
-
phpからmysqlにデータ保存(テ...
-
PHPでURLにジャンプするには?
-
HTMLで前の画面に戻る時、入力...
-
複数 selectフォームから今回on...
-
laravelを利用してコントロール...
-
セッションを使わずに遷移先画...
-
同じページでフォームデータを...
-
PHPで、ボタンを押すと同じペー...
-
PHPにてselectboxの色によっ...
-
PHP セレクトボックスの値 GET...
-
DBの値をチェックボックスに反...
-
セレクトしたときに全て初期状...
-
PHPでバーコード読み取りって・...
-
検索時の選択内容を保持する方法
-
PHPで画像の渡しが上手く行きま...
-
プルダウンリスト(コンボボッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA で、スペースを含むファイ...
-
Flaskでサーバー立ち上げに関して
-
記号[]が混ざった正規表現について
-
php メールフォーム エラー表...
-
chmod 教えてください
-
選択行の受け渡しに関して
-
PHPで作成した2つのプログラム...
-
正規表現について
-
php+mysqlでの重複チェックにつ...
-
お問い合わせフォーム session...
-
引数の参照について
-
文法の質問です
-
年月日のプルダウンメニューで...
-
php MySQL データ登録 方法
-
POSTの項目に追加
-
PDO+SQLITEでのインジェクショ...
-
PostgreSQLに書き込むことが出...
-
テキスト文書(.txt)→エクセルに...
-
これに間違いはありますか?
-
ポインタ配列をfscanfで読み込...
おすすめ情報