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


Real escape string vs bind param

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

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

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

对于*_escape_string,开发人员必须确保所有值:

  • 通过相应的*_escape_string函数,
  • 放置在SQL字符串文字中,因为*_escape_string函数仅用于转义字符串文字值。
如果开发人员有规律地跟踪每个参数的处理,那么

可以完美地工作。但是,语句变得越复杂,就越容易出错。

如果只有一个参数缺少适当的处理或处理,语句就容易受到SQL注入的攻击。老实说,实际上Stack Overflow上有很多例子表明这种手工技术更容易出错,因为它很容易忽略前面提到的一点。

与此相反,PDO通过在语句中只使用占位符提供了一个抽象层。参数值是单独传递的,PDO负责适当的处理和处理。开发人员所要做的就是用占位符准备语句,然后用实际值执行准备好的语句。

现在哪个更好?显然,后一种PDO变体,因为它更不容易出错,而且更干净。由于现在由PDO完成,开发人员需要考虑和照顾的事情更少了。