2011-06-21 14 views
1

私は従来のPHPフレームワークで作業しています。私は追跡できない奇妙な動作を経験しています。LIKE式のMySQLハイフン

は、私は列がテキスト「ワードanotherword」を含むテーブルからレコードを返したいと思い、この

select * from table where column like '%word-anotherword%' 

、のようになりますクエリを実行していますよ。 (列は長いテキストフィールドです)。

このクエリをphpMyAdminで実行すると、予想される結果が得られます。しかし、フレームワークの中から実行すると、結果は得られません。別の.phpファイルで実行しました。mysql_link,mysql_queryを使用してクエリを実行しました。また、期待どおりに動作します。

フレームがmysql_queryに渡される直前に私がechoのクエリを出すと、予想どおりのフォーマットになります。 I.我々のフレームワークは予期しない方法でそれをエスケープしていません。

私はこのフレームワークがこの動作の違いを引き起こすためにどこかのPHP設定をオーバーライドしていると仮定していますが、私はそれが何であるかについてグーグルグーグルではありませんでした。私はthis articleを見つけました。これは良いスタートと思われましたが、私が見ているものに合っているようにも見えませんでした。なぜなら、同じMySQLセットアップで異なる動作をしているからです。

正しい方向へのポインタがあれば幸いです!

+0

mysql_client_encoding($ link)の結果は –

+0

どのフレームワークを使用していますか? –

+0

正しい場所でエコーをしてもよろしいですか? –

答えて

2

あなたがechoクエリアウトは、あなたが実際にデータを見ていることを確認したい場合がありますとき - 例えばecho - ウェブページに掲載されている場合は、文字列にhtmlspecialchars()を適用していることを確認してください。さもなければ、いくつかの変更を見つけることはできません。

+0

* facepalm *ありがとう!その前に実際のクエリが表示された後、すぐにエラーを発見しました! – goggin13

1

LIKEは全文検索ではないので、質問のタイトルが間違っていて、見つかった記事があなたの問題に関連していない可能性があります。

そして、あなたの問題について、あなたのmy.cnfを開き、クエリログを有効:

[mysqld] 

#Set General Log 
log = "C:/all_queries.log" 

今すぐあなたのクエリを実行し、ログに見えます。デバッグヘッドアップとして

+0

ログファイルの設定に問題があります。私は、 'log'はMySQL 5.1.6では廃止されたと考えています(つまり、サーバのログには私のことを伝えている)ので、' general_log_file = "queries.log"と 'general_log = 1'を使いました。私は私のMySQLのインストールのデータフォルダ内のqueries.logファイルを見ることができますが、サーバはログを見つける際にエラーを報告しませんが(悪いパスを入れたときのエラー)、実行時に何も書き込まれませんクエリ。私は何が欠けているかも知っていますか? – goggin13

+0

申し訳ありませんが、私はMySQL 5.1を持っています。 MySQL 5.5のようにも見えるでしょう。log_output = FILE(http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_log_output) – Zyava

+0

これはうまくいきます。リンク!私の問題は、ピンクゴーシックが指摘したように、はるかに単純なものになった。しかし、ログを設定するためのヒントをありがとう、私は将来のデバッグに役立つだろうと確信しています! :) – goggin13