什么是客户端预准备语句?

2022-08-30 19:46:18

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

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

我知道什么是准备好的发言稿。这个问题的答案是一个简单的例子,我相信这是服务器端准备的语句。PHP是一种服务器端语言,这反过来应该意味着客户端预准备语句是否可用并不重要。但这让我想知道为什么它甚至列在PHP手册中。

那么什么是客户端预准备语句呢?


答案 1

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

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

如果 PDO 驱动程序不支持服务器端预准备语句,PDO 将在客户端模拟它们,并使用通用查询接口来执行它们。

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


答案 2

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

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


推荐