动态PDO与OR
我对Yii的动态PDO与OR,pdo,yii,Pdo,Yii,我对Yii的CDBCrtieriabuilder有问题。我试图在使用PDO提供的转义和安全函数时进行一个相当复杂的查询 以下是我基本上试图构建的查询: SELECT * FROM tbl_audit_log WHERE (model_id = 1 AND model = "Title") OR (model_id = 1 AND model = "Product") //etc WHERE (model_id = 1 AND model = "Title
CDBCrtieria
builder有问题。我试图在使用PDO提供的转义和安全函数时进行一个相当复杂的查询
以下是我基本上试图构建的查询:
SELECT * FROM tbl_audit_log
WHERE (model_id = 1 AND model = "Title") OR
(model_id = 1 AND model = "Product") //etc
WHERE (model_id = 1 AND model = "Title") OR
(model_id = 1 AND model = "Product") //etc
这是在PHP中动态构建的,如:
$model_ids = array(array($model->id, 'Title'));
foreach($model->products as $id => $product){
$model_ids[][] = $product->id;
$model_ids[][] = "Product";
}
因此,在构建查询之前,我不知道WHERE
的值。我必须找到一个简单的方法来构建:
SELECT * FROM tbl_audit_log
WHERE (model_id = 1 AND model = "Title") OR
(model_id = 1 AND model = "Product") //etc
WHERE (model_id = 1 AND model = "Title") OR
(model_id = 1 AND model = "Product") //etc
动态地
我已经浏览了文档,但最近看到的是addCondition
,它需要复杂的编码才能正常工作
Yii是否提供了实现这一点的简单方法,而无需编写复杂的代码来命名参数等?这确实有点复杂,但这里有一个可行的解决方案:
$criteria = new CDbCriteria();
$param_id = 0;
// $model_ids is the one you built in your original code
foreach( $model_ids as $id_pair ) {
$criteria->addCondition( '( model_id = :id' . $param_id . ' AND model = :model' . $param_id . ' )', 'OR' );
$criteria->params[ ':id' . $param_id ] = $id_pair[0];
$criteria->params[ ':model' . $param_id ] = $id_pair[1];
$param_id++;
}
这将为每个参数生成自定义标识符,以便对它们进行验证。然后您可以在查询中使用
$criteria
。这确实有点复杂,但这里有一个可行的解决方案:
$criteria = new CDbCriteria();
$param_id = 0;
// $model_ids is the one you built in your original code
foreach( $model_ids as $id_pair ) {
$criteria->addCondition( '( model_id = :id' . $param_id . ' AND model = :model' . $param_id . ' )', 'OR' );
$criteria->params[ ':id' . $param_id ] = $id_pair[0];
$criteria->params[ ':model' . $param_id ] = $id_pair[1];
$param_id++;
}
这将为每个参数生成自定义标识符,以便对它们进行验证。然后您可以在查询中使用
$criteria
。我忘了您可以这样做!我会尽快测试和标记的谢谢:)太棒了,我忘了你能做到!我会尽快测试和标记谢谢:)