2011-04-10 94 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 :)