我正在尝试在 Yii 中使用 CDbCriteriaREGEXP
健康)状况。我使用 MySQL 标记作为字边界,是[[:<:]]
and [[:>:]]
,但这似乎与 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() http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concat函数实际为正则表达式生成字符串,而不是我们自己提供字符串,如下所示:
$criteria->addCondition('col regexp CONCAT("[[:<:]]", :app, "[[:>:]]")');
或者,绑定整个正则表达式本身:
$criteria->addCondition('col regexp :regexp');
$criteria->params = array(':regexp'=>'[[:<:]]'.$app.'[[:>:]]');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)