Yii Php,PostgreSQL-以编程方式处理数据库中的空白

Yii Php,PostgreSQL-以编程方式处理数据库中的空白,php,postgresql,yii,whitespace,criteria,Php,Postgresql,Yii,Whitespace,Criteria,我在处理各种数据、数据库值、特殊字符等方面遇到问题 我在查询postgres数据库时使用了Yiiphp,特别是CDbCriteria,我对条目前后都有空格的条目有问题,以证明: 我有: $criteria = new CDbCriteria; $criteria->compare('first_name',trim($name) , false, 'OR'); $criteria->compare('surname', trim($name), false, 'OR')

我在处理各种数据、数据库值、特殊字符等方面遇到问题

我在查询postgres数据库时使用了Yiiphp,特别是CDbCriteria,我对条目前后都有空格的条目有问题,以证明:

我有:

  $criteria = new CDbCriteria;
  $criteria->compare('first_name',trim($name) , false, 'OR'); 
  $criteria->compare('surname', trim($name), false, 'OR');

  $person = Name::model()->find($criteria); 
假设上面的代码在数据库中找到一个匹配的行,给定输入表单中的$name变量。如果数据库表中的名字或姓氏没有空格,则此操作非常有效

例如:

$name = "Richard";
但在数据库中,第一个名称值是:

“[空白]理查德[空白]”

然后,$person将返回null,因为数据库中有带空格的“Richard”,所以找不到“Richard”。然而,正确的行为是,它应该正确匹配,因为它们基本上是相同的名称(我知道在数据库中使用空格不是一件好事,因为每个条目都应该被修剪,但是应用程序应该足够灵活来处理这一点)。我如何解决这个问题?非常感谢

你有两个选择

1) 编辑记录时以编程方式删除空白(请参阅
beforeSave()

2) 在条件中使用修剪

$criteria = new CDbCriteria;
$criteria->condition = "TRIM(first_name) = '".trim($name)."' or TRIM(surname) = '".trim($name)."'";

您可以按照
$criteria->compare(“TRIM(first_name)”…)
执行上述操作,但我不确定。

这太快了。。$criteria->compare(“TRIM..works..我更喜欢2号..谢谢you@YiiNewbie出于许多原因,您最好实现第一个,但主要是因为保持数据一致性是一件好事。