猿问

请教各位一个问题,求解答:php PDO中exec函数怎么防止sql注入,需要提前prepare吗?

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吗?
一只甜甜圈
浏览 228回答 2
2回答

慕慕森

首先你的代码有问题,正确的应该是:$sql="....";$sth=$pdo->prepare($sql);$sth->execute();根据文档,PDO::exec的参数有这样的描述:查询中的数据应该被妥善地转义,说明需要用户自己去进行参数的转义。PDO防注入是将SQL语句区分成模版和参数两部分,参数会被预处理/转义,然后填充到模版生成最终的SQL语句,参数的转义可以由PDO处理(使用PDOStatement);也可以由用户程序处理,那就是你先对post的数据做预处理后,再直接执行。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答