按照目前的情况,这个问题不适合我们的问答形式。 我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。 如果您认为此问题可以解决并且可以重新提出,
请访问帮助中心以获取指导。
6年前关闭。
已锁定 。 该问题及其答案被
锁定,因为该问题是题外话,但具有历史意义。 它目前不接受新的答案或互动。
在我们的位置上,我们在使用mysqli和PDO进行诸如准备好的语句和事务支持之类的操作之间有所分歧。 有些项目使用一个,另一些使用。 我们迁移到另一个RDBMS的现实可能性很小。
我更喜欢PDO,这是因为它允许预准备语句使用命名参数,而据我所知mysqli不允许。
在我们将项目合并为仅使用一种方法时,是否有其他选择作为标准的利弊?
#1楼
如果您的站点/ Web应用程序真正成为现实,那么PDO将使扩展变得容易得多,因为您可以每天设置主从连接来在数据库中分配负载,此外PHP正朝着将PDO迁移为标准的方向发展。
#2楼
要记住一件事。
Mysqli不支持fetch_assoc()函数,该函数将返回带有表示列名的键的列。 当然,可以编写自己的函数来做到这一点,虽然还不算很长,但是我确实很难编写它(对于非信奉者:如果您觉得很容易,请自行尝试一下,不要这样做。 t作弊:))
#3楼
PDO有MySQLi我不真正喜欢的一件事是PDO能够将结果作为指定类类型的对象返回(例如$pdo->fetchObject('MyClass') )。 MySQLi的fetch_object()将仅返回一个stdClass对象。
#4楼
将应用程序从一个数据库迁移到另一个数据库并不常见,但是迟早您可能会发现自己正在使用不同的RDBMS处理另一个项目。 如果您在家中使用PDO,那么到那时至少要少学习一件事。
除此之外,我发现PDO API更加直观,并且感觉更加面向对象。 如果您知道我的意思,mysqli感觉这只是一个已被对象化的过程API。 简而言之,我发现PDO更易于使用,但这当然是主观的。
#5楼
编辑答案。
在对这两种API都有一定的经验之后,我会说有2种阻止级别的功能,这些功能使mysqli无法与本机预处理语句一起使用。
他们已经在2个出色的答案中被提及(但被低估了):
(在此答案中也都提到了)
由于某种原因,mysqli都失败了。
如今,第二个版本( get_result )有了一些改进,但是它仅适用于mysqlnd安装,这意味着您不能在脚本中依赖此功能。
但是直到今天,它都没有按值绑定。
因此,只有一种选择: PDO
所有其他原因,例如
命名的占位符(此语法糖被高估了)
不同的数据库支持(实际上没有人使用过)
获取对象(只是无用的语法糖)
速度差(无)
并不重要。
同时,这两个API都缺少一些真正重要的功能 ,例如
标识符占位符
复杂数据类型的占位符,以使动态绑定的工作量减轻
较短的应用程序代码。
因此,为了满足现实生活的需求,必须基于这些API之一创建自己的抽象库,以实现手动解析的占位符。 在这种情况下,我更喜欢mysqli,因为它的抽象级别较低。