Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Yii';s CDB标准';s将方法与空字符串进行比较_Php_Sql_Yii_Criteria - Fatal编程技术网

Php 使用Yii';s CDB标准';s将方法与空字符串进行比较

Php 使用Yii';s CDB标准';s将方法与空字符串进行比较,php,sql,yii,criteria,Php,Sql,Yii,Criteria,我正在制定一个新的YiiCDbCriteria,并希望添加以下条件: $criteria = new CDbCriteria(); $criteria->compare('code', $code); 但是,在我的应用程序中,变量$code可以是空字符串。我在文件中读到: 当该值为空时,将不会将任何比较表达式添加到 搜索条件 这不是我想要的行为。我希望它与空字符串进行比较。有没有办法通过比较来实现这一点 我是否也可以使用以下查询?安全吗 $criteria->addConditio

我正在制定一个新的Yii
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的数量是可变的,取决于输入变量。我喜欢第二种解决方案。我不知道它的存在,我会进一步检查它。