2011-06-21 22 views
1

我正在使用遺留的PHP框架,並遇到一些我無法追查的奇怪行爲。LIKE表達式中的MySQL連字符

我運行一個查詢,看起來像這樣

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

,我想從表,其中列載文「字anotherword」返回記錄。 (列是一個longtext字段)。

當我在phpMyAdmin中運行這個查詢時,我得到了預期的結果。但是當我從框架內運行它時,我沒有得到任何結果。我已經運行它在一個單獨的.php文件中,使用mysql_link,mysql_query來運行該查詢,並且其行爲與預期相同。

當I echo直接將框架中的查詢傳遞給mysql_query之前,它的格式與我所期望的相同。 I.E.我們的框架並沒有以某種意想不到的方式逃脫。

我假設我們的框架重寫了一些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

是的,這工作,並感謝鏈接! pinkgothic指出,我的問題最終變得簡單得多。感謝您提供設置日誌的提示,但我相信這對未來的調試將很有用! :) – goggin13

相關問題