使用 Yii 的 CDbCriteria 的比较方法与空字符串
Using Yii's CDbCriteria's compare method with empty strings
我正在制作一个新的 Yii CDbCriteria
,并想添加以下条件:
$criteria = new CDbCriteria();
$criteria->compare('code', $code);
但是,在我的应用程序中,变量 $code
可以是一个空字符串。我在文档中阅读:
When the value is empty, no comparison expression will be added to the
search condition.
这不是我想要的行为。我希望它与空字符串进行比较。有没有办法使用 compare
来完成此操作?
我还可以使用以下查询吗?安全吗?
$criteria->addCondition("code = $code");
如果是,compare
和addCondition
之间的drawbacks/benefits是多少?
CDbCriteria::compare()
是 addCondition
的快捷方式包装器(后者在其主体内调用)。该方法的设计使其涵盖处理过滤条件的最常见用例;这就是它忽略 'non-meaningful' 输入的原因。由于您的情况在覆盖区域之外,您应该使用低级 addCondition
,但有一个转折:
$criteria->addCondition('code = :code');
$criteria->params[':code'] = $code;
您还可以使用另一种快捷方式:
$criteria->addColumnCondition(array('code' => $code));
我正在制作一个新的 Yii CDbCriteria
,并想添加以下条件:
$criteria = new CDbCriteria();
$criteria->compare('code', $code);
但是,在我的应用程序中,变量 $code
可以是一个空字符串。我在文档中阅读:
When the value is empty, no comparison expression will be added to the search condition.
这不是我想要的行为。我希望它与空字符串进行比较。有没有办法使用 compare
来完成此操作?
我还可以使用以下查询吗?安全吗?
$criteria->addCondition("code = $code");
如果是,compare
和addCondition
之间的drawbacks/benefits是多少?
CDbCriteria::compare()
是 addCondition
的快捷方式包装器(后者在其主体内调用)。该方法的设计使其涵盖处理过滤条件的最常见用例;这就是它忽略 'non-meaningful' 输入的原因。由于您的情况在覆盖区域之外,您应该使用低级 addCondition
,但有一个转折:
$criteria->addCondition('code = :code');
$criteria->params[':code'] = $code;
您还可以使用另一种快捷方式:
$criteria->addColumnCondition(array('code' => $code));