PDO与MYSQLI,准备语句和绑定参数

时间:2013-05-26 15:10:38

标签: parameters pdo mysqli bind

我有这个问题要清理。我阅读了一些文档和评论,但有些事情还不够清楚。

  • 据我所知PDO提供了更多的驱动程序,如果你想改变你的数据库类型,这肯定是一个加分。
  • 正如另一篇文章所述,PDO并不提供真实的准备陈述,但mysqli这样做会更安全地使用MYSQLI
  • 基准测试看起来很相似,(不是自己测试,而是在网上查看一些基准测试)
  • 面向对象对我来说不是问题,因为mysqli正在迎头赶上。但是,对程序性的mysqli和PDO进行基准测试会很好,因为程序应该稍快一些。

但这是我的问题,使用预处理语句,我们是否必须使用参数绑定我们在语句中使用的数据?好的做法还是要?如果您多次运行相同的查询但是它足以保护查询本身,我理解准备好的语句是良好的性能?或绑定参数是必须的?具体的绑定参数是什么以及它如何保护数据免受sql注入?如果您指出我对上述陈述的任何误解,也将不胜感激。

感谢

1 个答案:

答案 0 :(得分:5)

简而言之,

  • 绑定是必须,是保护的基石,无论本机驱动程序是否支持。重要的是替换的想法。
  • 除少数边缘情况外,安全性和性能的差异可以忽略不计
  • 性能是最后要考虑的事情。没有API比其他API慢得多。它不是一个类或函数可能导致任何性能问题,但数据操作或坏算法。优化您的查询 - 有一种方法可以去 - 不仅仅是调用它们的功能。
  • 如果您打算使用原始裸API,那么PDO是唯一的选择。被包含在更高级别的类中,mysqli似乎更适合mysql。
  • mysqli和PDO都缺乏对开发者必须自己编写的重要文字的约束,请参阅safeMysql作为示例。