请教关于php中使用pdo进行mysql语句的预处理来防止注入的问题
比如:下面的语句,在php中如何变为预处理的语句,才能防止注入呢?$db->prepare("select*from`user`whereidin(4,5,6,7,8,9...
比如:
下面的语句,在php中如何变为预处理的语句,才能防止注入呢?
$db->prepare("select * from `user` where id in (4,5,6,7,8,9) ORDER BY id ASC"); 展开
下面的语句,在php中如何变为预处理的语句,才能防止注入呢?
$db->prepare("select * from `user` where id in (4,5,6,7,8,9) ORDER BY id ASC"); 展开
1个回答
2015-05-08 · 知道合伙人软件行家
关注
展开全部
$pdo = new PDO(//配置);
$sql = 'SELECT field FROM table WHERE field=:condition';
$r = $pdo->prepare($sql);
$r->execute(array(':condition'=>$param));
//这里把参数直接以数组的形式传进去,其余工作prepare会自动帮你完成
//prepare的工作就是预先处理sql语句预防可能出现的注入,不然怎么会叫预处理呢
追问
大神:
按照您上面的方法,
那我是不是要改为像下面的呢:
$db->prepare("select * from `user` where id =:condition ORDER BY id ASC");
$db->execute(array(':condition'=>4,‘:condition'=>5,:condition'=>6));
您帮评价一下我上面修改还有什么地方不够完善吗?
追答
这样查不出来数据的,要实现你的功能的这样写
$db->prepare("select * from `user` where id=:p1 or id=:p2 or id=:p3');
$r->execute(array(
':p1'=>'4'
':p2'=>'5'
':p3'=>'6'
));
//或
$db->prepare("select * from `user` where id in (:p1)');
$r->execute(array(
':p1'=>'4,5,6'
));
//他只会执行一次,而不会因为有多个变量就执行多次
本质上预处理是对sql语句模板的处理,再本质点就是处理字符串,只不过prepare函数会把可能出现的问题帮你解决了(比如变量不加单引号啊,有特殊字符啊等等)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询