Hir*_*hut 4 php mysql sql-injection yii2
我将尝试下面的查询,但不确定是否可以防止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();
Run Code Online (Sandbox Code Playgroud)
返回预期结果,但可能会发生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();
Run Code Online (Sandbox Code Playgroud)
仅比较数组中的第一个元素,因为它看起来像这样,
IN ('1, 2, 3')它由单个字符串组成,不检查数组中的第二个元素,仅对第一个元素起作用。
我参考下面的链接,但不知道如何实现这个条件。
IN() Condition请给出join(PDO/Yii2/mysql)部分如何使用的解决方案On。
基于这个问题:
$rows = (new \yii\db\Query())
->select('*')
->from('user')
->leftJoin('post', ['post.user_id' => new \yii\db\Expression('user.id'), 'post.some_column' => $sid, 'post.status' => $statuesArray]);
->all();
Run Code Online (Sandbox Code Playgroud)