2011-04-10 69 views
7

我有我認爲是CakePHP中的普通查詢調用 - 它適用於所有結果,但是當一個字段中有特殊字符時,字段將返回空。它不會中斷 - 它仍然給我剩餘的領域 - 這只是一個空的領域。CakePHP - 查詢返回空字段,如果它有一個特殊字符

例子:

$this->paginate = array(
'conditions' => array(
    'Item.name != ' => '', 
), 
); 
$data = $this->paginate('Item'); 

這將返回我的表中的所有項目(包括我想有一個空的名稱字段中的一個) - 但是當我嘗試名稱顯示到頁面上,它的工作原理除了特殊字符(é)以外的每個項目。我將它改爲正常的「e」,顯示正常。

即使他們的名字中有特殊字符,我該如何返回結果呢?提前致謝!

+2

什麼是表的編碼?另外,當您手動運行查詢時會發生什麼,它會顯示出來嗎?並通過在其上運行'var_dump()'來檢查字段是否實際填充了 – JohnP 2011-04-10 06:22:27

+0

@JohnP - 我不確定編碼,但是當我手動運行查詢(通過軟件或通過常規php)時,它顯示正好。 – Dave 2011-04-10 06:34:28

+0

@Dave您需要確認Cake是否在數據上運行任何過濾。運行var_dump()或debug()並查看數據是否實際存在於數組中並且不顯示。您可能還想要將數據庫的排序規則設置爲utf_8以及HTML中的內容類型 – JohnP 2011-04-10 06:40:05

回答

8

檢查,以確保您的數據庫使用正確的編碼(UTF-8,理想情況下),並且已配置蛋糕在config/database.php使用此相同的編碼,以及:

class DATABASE_CONFIG { 
    public $default = array(
     ... 
     'encoding' => 'utf8' 
    ); 
} 

如果你有一些編碼不匹配,你的應用程序可能已經在數據庫中存儲了垃圾,因此請確保使用正確的數據和/或新的數據庫進行測試。

+0

UTF-8是否允許我保留特殊字符,如變音符號...等等? – Dave 2011-06-24 14:40:11

+0

Plus - 數據庫中的內容看起來很好 - 它具有特殊字符和所有內容 – Dave 2011-06-24 15:06:21

+0

是的,UTF-8允許您正確存儲和處理幾乎任何人物角色。你如何確認數據庫的內容?您可能實際上正在查看垃圾兩次不正確的處理,這會再次正確顯示它。 – deceze 2011-06-24 21:52:43

0

這可能不是特定於Cake的問題,更多的是PHP/MySQL問題。 (其他人已經長大的編碼,所以我會跳過。)

單引號意味着一個字符串是手到MySQL:'Item.name != ' => ''

PHP(一拉蛋糕)可能解析該字符串毫不誇張。事實上,它甚至可以分析它想:

"Item.name != " 

(?!注意,沒有操作數後的,如果它落在最後的SQL查詢時,查詢不會出錯,它可能仍然工作)

當你針對它的測試:

"Item.name != ''" 

(注意空單引號現在包含在字符串中)

然而,由於你沒有得到一個錯誤 - 和的休息數據拉! - 您可能想要編輯該語句,因爲您的問題更可能是語法。

'Item.name IS NOT NULL' 
'Item.name <> ' => '' 
'Item.name IS NOT' => '' 

試試這些。

http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html描述IS NOT NULL與IS NOT(布爾)vs <>和!=(不等於)。

HTH :)