繁体   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