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 回答

GCT1015
TA貢獻1827條經驗 獲得超4個贊
首先你的代碼有問題,正確的應該是:$sql="....";$sth=$pdo->prepare($sql);$sth->execute();根據文檔,PDO::exec的參數有這樣的描述:查詢中的數據應該被妥善地轉義,說明需要用戶自己去進行參數的轉義。PDO防注入是將SQL語句區分成模版和參數兩部分,參數會被預處理/轉義,然后填充到模版生成最終的SQL語句,參數的轉義可以由PDO處理(使用PDOStatement);也可以由用戶程序處理,那就是你先對post的數據做預處理后,再直接執行。