Yii:findAllByAttributes()使用$ attributes vs $ condition + $ parms:

时间:2014-09-08 03:05:26

标签: php yii

我想知道findAllByAttributes()的第一个参数是否可以避免sql注入,或者只使用$ condition + params来保护sql注入?

当您选择使用其中一个时,还有其他注意事项吗?

enter image description here


使用$ 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 个答案:

答案 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/