1

我想知道是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
   )
);
4

2 回答 2

1

使用$attributesinfindByAttributes()可以保护您免受 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]
);
于 2019-06-23T14:18:44.573 回答
-1

这是一篇关于 Yii 中 sql 注入的好文章

http://www.yiiframework.com/wiki/275/how-to-write-secure-yii-applications/

于 2014-09-08T08:19:50.000 回答