悠悠楠杉
Yii1.1中CDbCriteria实现NOTLIKE查询
php
$excludeWords = array('促销', '特价', '优惠');
$criteria = new CDbCriteria;
foreach ($excludeWords as $word) {
$criteria->addCondition("title NOT LIKE '%{$word}%'", 'AND');
$criteria->addCondition("keywords NOT LIKE '%{$word}%'", 'AND');
$criteria->addCondition("description NOT LIKE '%{$word}%'", 'AND');
}
$articles = Article::model()->findAll($criteria);
高级技巧
使用参数绑定防止SQL注入
为了提高安全性,建议使用参数绑定的方式:
php
$criteria = new CDbCriteria;
$criteria->addCondition('title NOT LIKE :pattern');
$criteria->params = array(':pattern' => '%敏感词%');
结合其他查询条件
NOT LIKE
可以与其他查询条件灵活组合:
php
$criteria = new CDbCriteria;
$criteria->addCondition("status = 'published'");
$criteria->addCondition("category_id = 5");
$criteria->addCondition("content NOT LIKE '%转载%'");
$criteria->limit = 10;
处理特殊字符
当搜索模式中包含特殊字符时,需要进行转义处理:
php
$searchTerm = CDbConnection::getInstance()->quoteValue('%'.addcslashes($term, '%_').'%');
$criteria->addCondition("title NOT LIKE {$searchTerm}");
性能优化建议
- 索引使用:确保查询字段已建立适当索引,特别是大文本字段
- 避免全表扫描:将
NOT LIKE
与其他精确匹配条件结合使用 - 限制结果集:合理使用
limit
和offset
分页
通过掌握这些技巧,您可以在Yii 1.1项目中高效实现各种复杂的NOT LIKE
查询需求,构建更加安全可靠的数据库查询逻辑。