Yii Php,PostgreSQL-以编程方式处理数据库中的空白
我在处理各种数据、数据库值、特殊字符等方面遇到问题 我在查询postgres数据库时使用了Yiiphp,特别是CDbCriteria,我对条目前后都有空格的条目有问题,以证明: 我有: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')
$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出于许多原因,您最好实现第一个,但主要是因为保持数据一致性是一件好事。