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


Yii Php, PostgreSQL - programmatically handling whitespaces in database

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

我在查询 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或姓氏没有空格,则此方法非常有效。

例如:

$name = "Richard";

但在数据库中,first_name值为:

"[空白]

理查德[空白]">

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

你有两个选择

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

2( 在标准中使用 TRIM。

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

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