Php 使用Yii';s CDB标准';s将方法与空字符串进行比较
我正在制定一个新的YiiPhp 使用Yii';s CDB标准';s将方法与空字符串进行比较,php,sql,yii,criteria,Php,Sql,Yii,Criteria,我正在制定一个新的YiiCDbCriteria,并希望添加以下条件: $criteria = new CDbCriteria(); $criteria->compare('code', $code); 但是,在我的应用程序中,变量$code可以是空字符串。我在文件中读到: 当该值为空时,将不会将任何比较表达式添加到 搜索条件 这不是我想要的行为。我希望它与空字符串进行比较。有没有办法通过比较来实现这一点 我是否也可以使用以下查询?安全吗 $criteria->addConditio
CDbCriteria
,并希望添加以下条件:
$criteria = new CDbCriteria();
$criteria->compare('code', $code);
但是,在我的应用程序中,变量$code
可以是空字符串。我在文件中读到:
当该值为空时,将不会将任何比较表达式添加到
搜索条件
这不是我想要的行为。我希望它与空字符串进行比较。有没有办法通过比较来实现这一点
我是否也可以使用以下查询?安全吗
$criteria->addCondition("code = $code");
如果是这样,那么compare
和addCondition
之间的缺点/优点是什么?CDbCriteria::compare()
是addCondition
的快捷包装器(后者无论如何都在其主体内调用)。该方法的设计涵盖了处理过滤标准的最常见用例;这就是它忽略“无意义”输入的原因。由于您的案例不在覆盖区域内,您应该使用低级的addCondition
,但要有一个转折点:
$criteria->addCondition('code = :code');
$criteria->params[':code'] = $code;
也可以使用其他快捷方式:
$criteria->addColumnCondition(array('code' => $code));
带有params
的选项实际上不适用于我的实际问题,因为我在if语句中有一个条件,所以params的数量是可变的,取决于输入变量。我喜欢第二种解决方案。我不知道它的存在,我会进一步检查它。