真正的转义字符串vs绑定参数

时间:2014-07-21 02:28:34

标签: php mysqli sql-injection

在php中,有什么区别,哪个更好,为什么,使用mysqli。

我有一个用真正的转义字符串编写的整个项目,是否有必要转换为面向对象的预准备语句?

1 个答案:

答案 0 :(得分:5)

从程序员的角度来看,手动转移值和PDO实现的参数化/准备语句之间的区别在于分离程度,自动化和责任转移。

使用*_escape_string,开发人员必须确保所有值:

  • 通过相应的*_escape_string函数和
  • 放在SQL字符串文字中,因为*_escape_string函数仅用于转义字符串文字值。

如果开发人员有纪律来跟踪每个参数的处理,这可以很好地工作。但它往往变得更加复杂,因此容易出错,语句越复杂。

如果只有一个参数缺少正确的处理或处理,那么该语句将受到SQL注入的攻击。说实话,Stack Overflow上有很多案例表明这种手动技术更容易出错,因为很容易错过上述各点之一。

与此相反,PDO通过在语句中使用占位符来提供抽象层。参数值分别传递,PDO负责正确的处理和处理。开发人员所要做的就是使用占位符准备语句,然后使用实际值执行预准备语句。

现在哪一个更好?显然后者是PDO变体,因为它不易出错,而且更清洁。开发人员可以考虑和处理的事情较少,因为它现在由PDO完成。