请教关于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");
展开
 我来答
xiii130
2015-05-08 · 知道合伙人软件行家
xiii130
知道合伙人软件行家
采纳数:817 获赞数:2867
爱好编程,在工作中积累了比较丰富的经验。愿与大家共同进步。

向TA提问 私信TA
展开全部
$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函数会把可能出现的问题帮你解决了(比如变量不加单引号啊,有特殊字符啊等等)

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式