我试图在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." )
答案 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攻击。