我想知道findAllByAttributes()
的第一个参数是否可以避免sql注入,或者只使用$ condition + params来保护sql注入?
当您选择使用其中一个时,还有其他注意事项吗?
使用$ attributes:
$result = Setting::model()->findByAttributes(
array(
'name'=>$name,
'lang_id'=>$lang_id
)
);
使用$ condition + $ parms:
$result = Setting::model()->findByAttributes(
'',
'name =:name AND lang_id = :lang_id',
array(
':name' => $name,
':lang_id => lang_id
)
);
答案 0 :(得分:1)
在$attributes
中使用findByAttributes()
可以保护您免受SQL注入的侵害,因此这是绝对安全的:
$result = Setting::model()->findByAttributes([
'name' => $name,
'lang_id' => $lang_id,
]);
这通常是首选语法,因为它比准备好的语句更简单,更短。但这并不能涵盖所有可能的情况-它适用于简单匹配,但是对于与=
不同的任何运算符,您都需要使用$condition
:
$result = Setting::model()->findByAttributes(
[
'name' => $name,
'lang_id' => $lang_id,
],
'priority >= :priority',
[':priority' => $priority]
);
答案 1 :(得分:0)
这是关于Yii中的SQL注入的一篇很棒的文章
http://www.yiiframework.com/wiki/275/how-to-write-secure-yii-applications/