- ベストアンサー
PHPとMysqlによる正規表現について
- データベースに登録した情報から検索するコードを書いたのですが、どう入力してもデータベースに登録した情報がすべて出てきてしまいます。入力フォームに検索した条件だけ表示させたいです。
- htmlの入力フォームを作り、そこから$_POSTでPHPに渡しました。コードは以下のとおりです。PHPの本を読んで見よう見まねで書いたのですが、さっぱりです。
- $_POSTを使ってデータベースに検索条件を渡して結果を表示する方法について教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> SELECT * FROM table WHERE table_a LIKE '%条件%'; これはプログラムを実行した結果、出力されたSQL文ではありませんよね? SQLの最後にはORDER BY table_id LIMIT 0,30と出力されるはずですし。 プログラムを実行した結果のSQLをそのままMySQLで実行して正常に 動作するのであれば、PHPの変数を噛ませようが正常に処理されると 思うのですが。 > $sql="SELECT * FROM table ".$condigition."ORDER BY table_id LIMIT 0,30"; のあとに echo $sql; exit; として、出力されたSQLに誤りがないかMySQLに発行してみて確認すべきと思われます。 見た感じだと、SQL発行後のコードに特に致命的な誤りがあるとは思えません。 1.想定しているようなSQLをMySQLで実行した時、出力が正常。 2.PHPから実行した時、出力が異常。 大抵こういう場合、PHPから発行しているSQLに誤りがあります。 その為、PHPから発行しているSQLを取得し、それが正常になるように修正する 方向性で考えるのが早く解決します。
その他の回答 (1)
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
検証していないのでなんとも分かりませんが、 $condition="WHERE table_a LIKE \"%".$name."%\""; の、 LIKE \"%"、"%\"";でエスケープしているダブルクォーテーションはシングルクォーテーションでは? あと、 $sql="SELECT * FROM table ".$condigition."ORDER BY table_id LIMIT 0,30"; のORDER BYの前に半角スペースが無いように思えます。 ANDの前もですね。 うまく動作しないならば、SQLが組み立て上がったあとにechoなどでSQLを出力し、 それをMySQLで直接実行してみて確認するのが良いでしょう。
お礼
早々の回答大変感謝します。 ありがとうございます。 ご指摘のところを直しましたが、うまくいきません。 何故か、登録された情報がすべて検索されてしまいます。 条件が絞れません。 >>echoなどでSQLを出力し、 それをMySQLで直接実行してみて確認するのが良いでしょう。 上記を試してみようかと思います。 どうもありがとうございました。
補足
>>それをMySQLで直接実行してみて確認するのが良いでしょう。 MySQLで直接 SELECT * FROM table WHERE table_a LIKE '%条件%'; では出来ましたが ここにphpで変数を入れるとうまくいきません。
お礼
naktakさんのおかげで無事解決しました。 原因は$condition変数の所がしたのは$condigitionとなっていてスペルミスでした。 > $sql="SELECT * FROM table ".$condigition."ORDER BY table_id LIMIT 0,30"; 1日以上かけて、問題を探していましたが、ようやくわかりました。 naktakさんには本当に感謝してます。 ありがとうございました。 これからPHPの習得に向けて頑張ります。 それでは失礼します。