使用 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");

如果是,compareaddCondition之间的drawbacks/benefits是多少?

CDbCriteria::compare()addCondition 的快捷方式包装器(后者在其主体内调用)。该方法的设计使其涵盖处理过滤条件的最常见用例;这就是它忽略 'non-meaningful' 输入的原因。由于您的情况在覆盖区域之外,您应该使用低级 addCondition,但有一个转折:

$criteria->addCondition('code = :code');
$criteria->params[':code'] = $code;

您还可以使用另一种快捷方式:

$criteria->addColumnCondition(array('code' => $code));