簡體   English   中英

使用PHP PDO轉義字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM