Php 使用PREPARE命令(SQL)vs PDO或mysqli函数

Php 使用PREPARE命令(SQL)vs PDO或mysqli函数,php,mysql,pdo,mysqli,prepared-statement,Php,Mysql,Pdo,Mysqli,Prepared Statement,我使用PHP开发web应用程序,并使用MySQL作为数据库。我正在努力理解预先准备好的语句的用法,只是迈出了第一步 据我所知,准备好的声明主要是为了: 提高查询效率(预解析、缓存执行计划、客户端和服务器之间的二进制数据传输) 确保免受代码注入攻击(这方面还不完全清楚,但我想我已经有了基本的了解) (可能还有其他用途) 问题是, 为什么不直接使用MySQL提供的PREPARE语句,事先准备好语句,然后在PHP应用程序(PDO或mysqli)中使用它们呢?更好的方法是,使用这些准备好的语句生成存储过

我使用PHP开发web应用程序,并使用MySQL作为数据库。我正在努力理解预先准备好的语句的用法,只是迈出了第一步

据我所知,准备好的声明主要是为了:

  • 提高查询效率(预解析、缓存执行计划、客户端和服务器之间的二进制数据传输)

  • 确保免受代码注入攻击(这方面还不完全清楚,但我想我已经有了基本的了解)

  • (可能还有其他用途)

    问题是,

    为什么不直接使用MySQL提供的PREPARE语句,事先准备好语句,然后在PHP应用程序(PDO或mysqli)中使用它们呢?更好的方法是,使用这些准备好的语句生成存储过程,并且只向PHP程序员公开这些语句

    这样,进行正确查询的实际负担由数据库程序员分离/处理。PHP程序员完全可以只关注应用程序的实现和优化

    我没有预见到我将很快使用的数据库会有任何变化。MySQL满足所有要求。但为了保持我的应用程序干净和数据库无关,我可以使用PDO。或者坚持程序编码并使用mysqli

    这是构建应用程序的有效方法吗


    谢谢

    PREPARE语句的结果有些特殊,用户无法返回。您可以通过在MySQL中存储一个变量来使用它。但是,这不是标准。MySQL为您提供API,以便PDO驱动程序使用它们,您可以编写与DB无关的代码。我看完全没有理由不这样做。在使用PDO的许多事情中,我特别喜欢(Drupal 7 DB layer派生出来),因为我参与了编写:)和。

    PREPARE语句的结果有些特殊,不能返回给用户。您可以通过在MySQL中存储一个变量来使用它。但是,这不是标准。MySQL为您提供API,以便PDO驱动程序使用它们,您可以编写与DB无关的代码。我看完全没有理由不这样做。在使用PDO的许多事情中,我特别喜欢(Drupal 7 DB layer衍生出来),因为我参与了它的编写:)和。

    Lol,你问题中几乎所有的假设都是错误的:)1。正如你所看到的,效率是可以想象的,而不是真实的。2.至于安全问题,这只是逃避的另一种方式,差别不大。Mysqli也有面向对象的接口,PDO不允许您如此轻松地交换数据库引擎。我只做了少量阅读,发现使用PREPARE编写的语句只是特定于会话的。有人能告诉我PDO准备的声明是否也适用于特定的会话吗?PHP中的每个页面请求都是一个会话(就数据库而言——打开连接和关闭连接),对吗?哈哈,你的问题中几乎所有的假设都是错误的:)1。正如你所看到的,效率是可以想象的,而不是真实的。2.至于安全问题,这只是逃避的另一种方式,差别不大。Mysqli也有面向对象的接口,PDO不允许您如此轻松地交换数据库引擎。我只做了少量阅读,发现使用PREPARE编写的语句只是特定于会话的。有人能告诉我PDO准备的声明是否也适用于特定的会话吗?PHP中的每个页面请求都是一个会话(就数据库而言——打开连接和关闭连接),对吗?