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