• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:検索機能)

検索機能の作成方法と注意点

このQ&Aのポイント
  • MySQLを使用して検索フォームを作成する方法を説明します。該当者がいない場合の表示やSQLインジェクション対策についても解説します。
  • 検索フォームに入力された条件を元に、MySQLのSELECT文を作成し、該当するデータを取得します。また、該当者がいない場合にはテーブルの表のみを表示する方法についても説明します。
  • SQLインジェクション対策として、mysql_real_escapeを使用して特殊文字をエスケープします。また、入力欄に「''''''」を入力することでSQLが実行される問題に対しても解決策を説明します。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>name欄にヒットしない文字があるときは該当者なし iのついていないmysql関数はすでに利用禁止にちかい状態なので 利用するならもう誰もフォローしてくれない前提で すべて自己解決するしかありません。 ですのでmysql関数の利用を前提の質問は公の掲示板ではしないでください PDOでやるならこんな感じ? <?PHP $dsn = 'mysql:host=localhost; dbname=test'; $pdo = new PDO($dsn,$user,$password); $name=isset($_GET['name'])?$_GET['name']:""; $sql ="select * from tbl where "; $sql.="`氏名` like concat('%',?,'%') "; $sql.="or `住所` like concat('%',?,'%') "; $stmt = $pdo->prepare( $sql); $stmt->execute(array($name,$name)); $count = $stmt->rowCount(); if($count>0){ print "<table border=1>" ; print "<tr>"; print "<th>番号</th>"; print "<th>氏名</th>"; print "<th>住所</th>"; print "</tr>"; while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ print "<tr>"; print htmlspecialchars($row["番号"]); print htmlspecialchars($row["氏名"]); print htmlspecialchars($row["住所"]); print "</tr>"; }; print "</table>" ; }else{ print "no hit!"; } ?>

noname#197690
質問者

お礼

ありがとうございます わかりました PDOにしてやります 指摘いただいたソースにしたらすべてno hitになります どこがいけないのでしょうか すいません

noname#197690
質問者

補足

すいません 出来ました 抽出したデータがテーブルになっていないので修正します tableのところですよね?

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ごめん、日本語としてわからない >入力してデータに該当したら検索結果が出るのですが >該当者がいないときはテーブルの表のみ出力してしまう ヒットしないときはテーブルのヘッダー部分を表示したくないということ? であれば戻り値が1以上あるときはテーブルを書いて、そうでなければ 書かないという分岐をいれるだけでは? >該当者なしと入力フォーム側に表示したいです >また ''''''を入力するとSQLになるのですが >mysql_real_escapeを使えば出なくなります まったく意味がわかりません たぶん以下のどちらかだと思うんですが →name欄になにも入れないときにはなにもヒットしないようにしたい →name欄にヒットしない文字があるときは表示しないようにしたい どっちでしょうかねぇ? それと書くたびにライブラリを変えるのはもうやめようよ どれでもできるんであれえばPDOで統一して例示して

noname#197690
質問者

お礼

返事遅くなり申し訳ありません name欄にヒットしない文字があるときは該当者なしと表示したいです どうすればいいですか? PDOは少しややこしくって

noname#197690
質問者

補足

すいません 'と入力するとSQLエラーです

関連するQ&A