phpPDO中exec函数怎么防止sql注入,需要提前prepare吗?我看到$pdo防sql注入是先prepare再excute,比如查询操作和插入操作,数据都是前台提交过来的$sql="selectpid,id,time,name,pl,znum,cnumfromtestwhereaid=?andstatus=1orderbyiddesc";$pdo->prepare($sql);$pdo->execute(array($_POST['aid']));.....这种没问题,但是这种$sql="insertintotest(aid,pid,time,name,pl,ip)values({$res['aid']},{$res['pid']},".time().",'".$res['nc']."','".$res['nr']."','{$ip}')";$pdo->exec($sql);如果如上执行,怎么防止SQL注入,在没个POST参数上面加quote()吗?exec可以先prepare吗?
2 回答
慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
首先你的代码有问题,正确的应该是:$sql="....";$sth=$pdo->prepare($sql);$sth->execute();根据文档,PDO::exec的参数有这样的描述:查询中的数据应该被妥善地转义,说明需要用户自己去进行参数的转义。PDO防注入是将SQL语句区分成模版和参数两部分,参数会被预处理/转义,然后填充到模版生成最终的SQL语句,参数的转义可以由PDO处理(使用PDOStatement);也可以由用户程序处理,那就是你先对post的数据做预处理后,再直接执行。
添加回答
举报
0/150
提交
取消