什么是客户端准备的声明?

Rep*_*pox 21 php mysql mysqli pdo prepared-statement

试图学习一些新东西 - 特别是在使用MySQL时选择使用MySQLiPDO进行未来项目 - 我偶然发现了这个页面,其中显示了我可用的选项概述.

在这个页面的底部是一个表格,比较了与mysql通信的三种主要方法的功能.在" API支持客户端准备语句 "行中,它表示PDO支持这一点,而MySQLi则不支持.

我知道准备好的陈述是什么.这个问题的答案是我认为是服务器端预处理语句的简单示例.PHP是一种服务器端语言,反过来应该意味着客户端准备好的语句是否可用并不重要.但这让我想知道为什么甚至会在PHP手册中列出.

那么什么是客户端准备的声明?

net*_*der 28

显然,客户端准备的语句是由客户端而不是服务器准备的语句.

PDO是一个数据访问抽象层,支持多个DBMS接口(驱动程序),其中一些支持服务器端预处理语句(例如:MySQL 4.1+),其中一些不支持(例如:MySQL 3).

在PDO驱动程序不支持服务器端预处理语句的情况下,PDO将在客户端模拟它们并使用通用查询接口来执行它们.

MySQLi不支持它们的原因很简单:MySQLi是一个特定于MySQL的扩展,一个确实支持服务器端预处理语句的RDBMS,因此没有理由模仿它们.


DCo*_*der 13

就像在评论中所说的那样,在这种情况下,"客户端"指的是PHP和"服务器"指向MySQL.PDO支持MySQL以外的数据库.并非所有这些数据库/ db驱动程序本身都支持预处理语句,在这些情况下,PDO将自己模拟这些语句.MySQLi不会(我不知道什么时候必须这样做 - 也许当它处理旧的MySQL驱动程序时?).

您可能需要考虑的另一个因素 - 某些PHP框架需要PDO并且不支持mysqli.