我认为我在CakePHP中是一个普通的查询调用 - 它适用于所有结果,但是当一个字段中有一个特殊字符时,该字段将返回空。它没有破坏 - 它仍然给我剩下的字段 - 它只是一个空的字段。
示例:
$this->paginate = array(
'conditions' => array(
'Item.name != ' => '',
),
);
$data = $this->paginate('Item');
这将返回我的表中的所有项目(包括我认为具有空名称字段的项目) - 但是当我尝试将名称回显到页面时,它适用于除具有特殊字符的项目之外的每个项目(E)。我把它改成了正常的“e”,它显示得很好。
即使他们的名字中有特殊字符,我如何返回结果?提前谢谢!
答案 0 :(得分:8)
检查以确保您的数据库使用正确的编码(理想情况下为UTF-8)并且您已将Cake配置为在config/database.php
中使用相同的编码:
class DATABASE_CONFIG {
public $default = array(
...
'encoding' => 'utf8'
);
}
如果您的编码不匹配,您的应用可能已经在数据库中存储了垃圾,因此请确保使用正确的数据和/或新数据库进行测试。
答案 1 :(得分: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 vs IS NOT(bool)vs&lt;&gt;和!=(不等于)。
HTH:)