• 締切済み

phpでDBを検索したい

最近PHP+mysqlの勉強を始めて、入門書片手に試行錯誤している状況です。 phpで検索ボックスを作って、データベースから名前を引っ張ってきたいのですが、うまくいきません… 因みに同じページに表示したいと思っています。 あと、多分使っている関数が古いとは思いますが、PDOやmysqliとかにすると今より更に知識不足でエラーになってしまうので、とりあえず古いままで使っていますが気にしないでください… データベース名:mydb テーブル名:table id | name | ---+------------+-- 1 | 名前太郎 | 2 | 氏名太郎 | 3 | 名字一郎 | 4 | 名前五郎 | 5 | 氏名花子 | こういうテーブルがあったとして、 名前 というキーワードで検索したときに、セレクトボックスに 名前太郎と名前五郎の2つが表示できたらと思っています。 根本的に間違っているのかもしれませんが、どのように変えればいいのかご教示いただけると幸いです。 何卒よろしくお願い致します。 <?php ちょっとした別の処理~省略 print <<<_FORM_ <label for="name_search">名前検索</label> <form action="" method="post"> <input name="u_name" type="text" id="u_namae" value="" /> <input type="submit"> </form> _FORM_; if (isset($_POST['u_name'])){ $kensaku = htmlspecialchars($_POST['u_name']); $kensaku = "'%". $kensaku ."%'"; require_once('dbconnect.php'); $sql = sprintf("SELECT * FROM table WHERE name LIKE $kensaku "); $recordSet = mysql_query($sql); print <<<_FORM_ <select name="u_name"> _FORM_; while ($kekka = mysql_fetch_assoc($recordSet)) { $val=htmlspecialchars($kekka['name']); ?> <option value="<?php print(htmlspecialchars($kekka['id'])); ?>"> <?php print(htmlspecialchars($kekka['name'])); ?> </option> <?php } print <<<_FORM_ </select> _FORM_; } ?>

みんなの回答

noname#244856
noname#244856
回答No.2

PHPでデータベースに接続するときのまとめ http://qiita.com/mpyw/items/b00b72c5c95aac573b71 Mysql関数でLIKE検索を行う際でも参考になる情報を掲載しているのでご覧ください。 サンプル http://pastebin.com/YDH12zqe Mysql関数使うと例外処理が非常に面倒なので、簡略化するためにErrorExceptionを使っています。こんなことするぐらいなら、上記まとめでも書いていますが「オブジェクト指向を毛嫌いせずに」学んでいった方が身のためだと思いますが…

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

まず・・・。ネイティブなMySQL関数はすでにオワコンです。PDOを推奨します。 http://www.php.net/manual/ja/mysqlinfo.api.choosing.php >PDOやmysqliとかにすると今より更に知識不足でエラーになってしまうので、 >とりあえず古いままで使っていますが気にしないでください… だからといって「使えない知識」を増やしてどうするんですかね。 http://www.php.net/manual/ja/book.pdo.php 提示されていない部分だと思いますが、DB接続後に mysql_set_charset はありますか(クライアント文字セットの設定をしていないと、日本語の処理で躓きます)。 あと、 $kensaku = htmlspecialchars($_POST['u_name']); $kensaku = "'%". $kensaku ."%'"; htmlspecialchars をSQL文の生成に使ってはいけません。MySQLのSQL文のエスケープには(MySQL関数であれば)mysql_real_escape_stringを使います。 というか今から書くならPDOでプレースホルダで書き直してください。

関連するQ&A