php-带正则表达式字符类的CDbCriteria参数

我正在尝试在具有REGEXP条件的Yii中使用CDbCriteria.我将MySQL标记用于单词边界,分别为[[:&lt ;:]]和[[:&gt ;:]],但这似乎与Yii冲突,因为我得到了“无效的参数编号:绑定变量的数量确实令牌数量不匹配”.我认为这是因为单词边界标记使用冒号,这也是用于绑定参数的内容.有没有解决的办法?

    $criteria = new CDbCriteria;
    $criteria->addCondition('col regexp "[[:<:]]:app[[:>:]]"');
    $criteria->params = array(':app'=>$app);
    $details = Post::model()->find($criteria);

解决方法:

PHP不会替换字符串内的占位符,即用引号引起来.如:

$criteria->addCondition('col = :app'); // param can be replaced
$criteria->addCondition('col = ":app"'); // param can't be replaced

因此,我们需要使用mysql的CONCAT()函数实际为regexp生成字符串,而不是自己提供字符串,如下所示:

$criteria->addCondition('col regexp CONCAT("[[:<:]]", :app, "[[:>:]]")');

或者,绑定整个正则表达式本身:

$criteria->addCondition('col regexp :regexp');
$criteria->params = array(':regexp'=>'[[:<:]]'.$app.'[[:>:]]');

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐