2015-06-25 00:49:57 9092次浏览 3条回答 0 悬赏 100 金钱

AR中有很多方法。

比如

model->findone(['id'=>1]);

请问这个查询,yii是否进行了参数化?

再比如

model->find()->where(['in','id','1,3,6']);

同上,现在自己写点小东西,越写心里越没谱,还希望有经验的帅哥们指导下,谢谢,如果上述方法框架自身没有进行参数化,那么现在趁早就全部改用参数方式来写了。免得最后害死人。

最佳答案

  • naivefang 发布于 2015-06-25 09:16 举报

    yii\db\Command.php里面在createCommand的时候,会默认用bindValue对参数进行处理,所以你可以放心的用上述写法而不用担心注入问题。

        /**
         * Binds pending parameters that were registered via [[bindValue()]] and [[bindValues()]].
         * Note that this method requires an active [[pdoStatement]].
         */
        protected function bindPendingParams()
        {
            foreach ($this->_pendingParams as $name => $value) {
                $this->pdoStatement->bindValue($name, $value[0], $value[1]);
            }
            $this->_pendingParams = [];
        }
    
    3 条回复
    回复于 2015-06-25 13:01 回复

    我想继续追问下。 手册中对于防注入专门的提醒,是在querybulider中的。

    那就是说用findbysql,或者等自己拼接sql的时候进行参数化处理。是不是可以理解为一般情况下,基于AR的可以放心,呃....findbysql。貌似不行,算了我去翻源码。多谢帅哥。

    回复于 2015-06-25 13:07 回复

    是的,如果自己拼接的sql,而非数组的形式传条件参数时,你就需要在拼接的时候注意SQL注入了。

    回复于 2015-06-25 16:01 回复

    谢谢你。

您需要登录后才可以回答。登录 | 立即注册
xjdata
CEO

xjdata

注册时间:2011-12-07
最后登录:2021-07-09
在线时长:112小时28分
  • 粉丝23
  • 金钱14169
  • 威望75
  • 积分16039

热门问题