Phalcon PhP:如何在Controller

时间:2016-11-10 21:09:35

标签: php phalcon

我试图在Controller类中运行原始SQL查询,而且我无法弄清楚为什么我不能绑定多个参数。看一下下面的代码:

    $sql = "select
        u.id,
        u.name,
        u.email,
        r.name as role
    from user u
    inner join role r on r.id = u.role_id
    left join user_group_user ugu on ugu.user_id = u.id and ugu.user_group_id = ".$user_group_id."
    where (u.name like :search or u.email like :search or r.name like :search)      
        and ugu.user_id is null and u.id not in( :notIn )
    order by u.name, r.name";

    $users = $this->db->query($sql, ['search' => '%'.$search.'%', 'notIn'=>$notInStr ])->fetchAll();

$ notIn变量的值类似于1,2,3。如果我只使用参数执行相同的操作:搜索查询有效。当我尝试使用这两个参数(:search和:notIn)时,查询返回但是:notIn似乎在查询中没有效果。看起来它没有受到限制。

如何在考虑这两个参数的情况下运行此查询?

感谢您的帮助

更新: 绑定实际上正在工作,但它将:notIn绑定为字符串,因此执行的查询为.... not in ('1,2,3')

我已经解决了我的问题,只是确保所有内容都是数字并且只是在查询中连接:...u.id not in( ".$notInStr." )

2 个答案:

答案 0 :(得分:1)

phalcon正在使用的标准pdo库以及phalcon db正在包装的标准pdo库不接受数组作为绑定参数。您需要使用phalcon模型。

答案 1 :(得分:1)

利用User Id:20065936, username: mental_floss User Id:16362921, username: developerWorks 。有一个Phalcon\Mvc\Model\Query\Builder方法,它接受数组作为参数。

请记住,永远不要使用您从最终用户那里获得的未过滤数据,就像您刚才那样。这使您的应用程序容易受到SQLInjection攻击。