0

我在处理各种数据库值、特殊字符等方面遇到了麻烦。

我在查询 postgres 数据库时使用Yii php,特别是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 变量。如果数据库表中的first_name 或 surname没有空格,这将非常有效。

例如:

$name = "Richard";

但在数据库中,first_name 的值为:

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

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

4

1 回答 1

1

你有两个选择

1) 编辑记录时以编程方式删除空格(查看beforeSave()

2)在标准中使用TRIM。

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

您可能可以执行上述操作$criteria->compare("TRIM(first_name)"...)- 但我不确定。

于 2013-09-26T05:27:02.093 回答