【发布时间】:2016-06-23 11:19:59
【问题描述】:
我会尝试下面的查询,但不确定是否防止 sql 注入?
$status = [1, 2, 3];
$param = implode(', ', $status);
$rows = (new \yii\db\Query())
->select('*')
->from('user')
->leftJoin('post', "post.user_id = user.id AND post.some_column = $value AND post.status IN ($param)");
->all();
返回预期结果但可能发生sql注入。我的 IN 条件是
IN (1, 2, 3)
$rows = (new \yii\db\Query())
->select('*')
->from('user')
->leftJoin('post', "post.user_id = user.id AND post.some_column = :sid AND post.status IN (:param)", [':param' => $param, ':sid' => $value]);
->all();
只比较数组中的第一个元素,因为看起来像这样
IN ('1, 2, 3')它由单个字符串组成,不检查数组中的第二个元素,只对第一个元素起作用。
我参考了下面的链接,但不知道如何实现这个条件。
Can I bind an array to an IN() condition?
请给出如何在On部分join(PDO/Yii2/mysql)中使用IN() Condition的解决方案。
【问题讨论】:
-
好的,我删除了我的答案,因为
where条件与on条件不同,您需要on条件。对了,我开这个issue,有兴趣的可以:github.com/yiisoft/yii2/issues/11827
标签: php mysql yii2 sql-injection