我想知道的是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
)
);
2条答案
按热度按时间ru9i0ody1#
在
findByAttributes()
中使用$attributes
可以防止SQL注入,因此这是非常安全的:这通常是首选的语法,因为它比预准备语句更简单、更短,但它并没有涵盖所有可能的情况--它适用于简单匹配,但对于任何不同于
=
的运算符,你需要使用$condition
:dojqjjoe2#
这是一篇关于SQL注入的文章
http://www.yiiframework.com/wiki/275/how-to-write-secure-yii-applications/