我正在处理Yii 1.1应用程序。
部分搜索方法使用CDbCriteria
和原始sql。
我想知道如何使用原始sql代码并使其从sql注入更安全?
这是一个代码示例:
if (!empty($this->textToSearch)) {
$text_condition = <<<EOC
(
topic LIKE "%{$this->textToSearch}%" OR
main LIKE "%{$this->textToSearch}%" OR
)
EOC;
$criteria->addCondition($text_condition);
}
有什么建议吗?
答案 0 :(得分:1)
您应该使用params将不受信任的数据传递给查询。请注意,%
,_
和\
字符在SQL查询中具有特殊含义,因此您也需要将其转义。
$criteria = new CDbCriteria();
if (!empty($this->textToSearch)) {
$text_condition = <<<EOC
(
topic LIKE :text_to_search OR
main LIKE :text_to_search
)
EOC;
$criteria->addCondition($text_condition);
$textToSearch = strtr($this->textToSearch, [
'%' => '\%',
'_' => '\_',
'\\' => '\\\\',
]);
$criteria->params[':text_to_search'] = "%{$textToSearch}%";
}