[英]Escaping string with PHP PDO
class _display
{
private function threads($id){
$this->dbh->prepare("select threads where id = :id");
$this->dbh->execute(array(':id' => $id));
$row = $this->dbh->fetch();
}
}
$id = $_GET['id'];
我需要對$ id做什么嗎?
TL; DR:不,准備語句中的參數不需要轉義。
轉義SQL查詢的整個問題是因為古老的mysql_ *庫只是作為字符串傳遞整個查詢,沒有指定“這是語法”和“這是數據”的方式 - 這是從語法隱含的,呼叫者有責任傳遞有效的聲明; 這也允許將格式錯誤/惡意數據視為語法,從而導致SQL注入等。
准備好的語句采用不同的方法:您使用占位符發送查詢,並分別傳遞數據。 因此,不需要轉義數據,因為它已經與語法分離。 (當然,准備好的聲明不是靈丹妙葯,但使用它們可以有效地關閉一類主要的漏洞)
您可以綁定$ id的值
$get=$this->dbh->prepare("select threads where id = ?");
$get->bindValue(1,$id,PDO::PARAM_INT);
$data = $get->execute();
$data=$get->fetch(PDO::FETCH_ASSOC);
這將減少SQL注入機會,因為我們將id綁定為整數,這是最佳實踐。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.