【问题标题】:Using Yii's CDbCriteria's compare method with empty strings使用 Yii 的 CDbCriteria 的比较方法与空字符串
【发布时间】:2015-08-27 15:37:43
【问题描述】:

我正在制作一个新的 Yii CDbCriteria,并想添加以下条件:

$criteria = new CDbCriteria();
$criteria->compare('code', $code);

但是,在我的应用程序中,变量 $code 可以是空字符串。我在文档中读到:

值为空时,不添加比较表达式 搜索条件。

这不是我想要的行为。我希望它与空字符串进行比较。有没有办法使用compare 来实现这一点?

我也可以使用以下查询吗?安全吗?

$criteria->addCondition("code = $code");

如果是这样,compareaddCondition 之间的缺点/优点是什么?

【问题讨论】:

    标签: php sql yii criteria


    【解决方案1】:

    CDbCriteria::compare()addCondition 的快捷方式包装器(无论如何,后者在其主体中被调用)。该方法的设计使其涵盖了处理过滤条件的最常见用例;这就是它忽略“无意义”输入的原因。由于您的案例在覆盖区域之外,您应该使用低级别的addCondition,但有一点不同:

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

    您也可以使用其他快捷方式:

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

    【讨论】:

    • params 的选项并不真正适用于我的实际问题,因为我在 if 语句中有一个条件,所以参数的数量取决于输入变量。我喜欢第二种解决方案。我不知道它的存在,我会进一步检查它。
    猜你喜欢
    • 2014-09-17
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多