在我们的地方,我们使用mysqli和PDO来处理准备好的语句和事务支持。有些项目使用其中一种,有些使用另一种。我们几乎不可能迁移到另一个RDBMS。

我更喜欢PDO,原因只有一个,它允许对预处理语句使用命名参数,而据我所知mysqli不允许。

当我们合并我们的项目只使用一种方法时,选择其中一种作为标准是否还有其他优点和缺点?


当前回答

PDO是标准,它是大多数开发人员希望使用的。mysqli本质上是针对特定问题的定制解决方案,但它具有其他特定于dbms的库的所有问题。PDO是所有努力工作和聪明思维的归宿。

其他回答

PDO是标准,它是大多数开发人员希望使用的。mysqli本质上是针对特定问题的定制解决方案,但它具有其他特定于dbms的库的所有问题。PDO是所有努力工作和聪明思维的归宿。

如果你的站点/web应用真的变得很简单,PDO将使它更容易扩展,因为你可以每天设置主连接和从连接,在数据库中分配负载,加上PHP正朝着PDO作为标准的方向发展。

PDO信息

扩展Web应用程序

我已经开始使用PDO,因为在我看来,语句支持更好。我使用的是activerecord式的数据访问层,实现动态生成的语句要容易得多。MySQLi的参数绑定必须在一个函数/方法调用中完成,所以如果你直到运行时才知道你想绑定多少个参数,你就被迫使用call_user_func_array()(我相信这是正确的函数名)来进行选择。忘记简单的动态结果绑定。

最重要的是,我喜欢PDO,因为它是一个非常合理的抽象级别。在不希望编写SQL的完全抽象的系统中使用它很容易,但它也使使用更优化的纯查询类型的系统或混合和匹配这两者变得容易。

有一件事要记住。

Mysqli不支持fetch_assoc()函数,该函数将返回带有表示列名的键的列。当然,你也可以自己写一个函数来实现它,它甚至不是很长,但我真的很难写出来(对于不相信它的人:如果它对你来说很容易,你可以自己试试,不要作弊:))

在执行速度方面,MySQLi胜出,但除非你有一个使用MySQLi的良好包装器,否则它的函数处理预处理语句是很糟糕的。

我的还有些bug,但如果有人想要的话,给你。

所以简而言之,如果你正在寻找一个速度增益,那么MySQLi;如果你想要易用性,那么PDO。