pdo 相对于 mysql_* 或 mysqli_* 的优势 [重复]

Posted

技术标签:

【中文标题】pdo 相对于 mysql_* 或 mysqli_* 的优势 [重复]【英文标题】:Advantages of pdo over mysql_* or mysqli_* [duplicate] 【发布时间】:2013-04-18 17:25:30 【问题描述】:

我注意到很多人正在使用或迁移到 pdo,我以前从未使用过,我真的很不愿意改变它,反正我仍然没有改变,但我想从那些人那里知道每天都使用 pdo 为什么我应该改成它,我的意思是它比 mysql_* 或 mysqli_* 有什么优势,我已经在谷歌上搜索了很多,但我还没有找到满意的答案。谢谢

【问题讨论】:

驱动支持和命名参数。 我觉得我不是很明白这一点,什么驱动或参数? 您是否喜欢查看手册或使用示例?您是否想在这里重新讨论一些具体的事情? php.net/manual/en/mysqlinfo.api.choosing.php 为了记录,这个之前已经问过:***.com/questions/13569/… 【参考方案1】:

这不是用一个应用程序支持多个数据库(尽管您可以,但要小心)。这不是为了让将来更改数据库变得容易(尽管它有帮助)。它是关于拥有一个一致的、合理的界面,无论数据库如何。这不仅有利于程序员(通过使他们的技能更广泛地适用)和项目(通过使程序员更容易参与),它还使得创建位于一层的库更容易很多在数据访问层之上。 Perl 拥有 DBI 已有 20 年了,这绝对是一件好事。 PDO 是一个非常相似的概念(实际上它至少窃取了 DBI 的一半接口)。

【讨论】:

【参考方案2】:

PDO 旨在支持对各种形式的 SQL 数据库的透明访问。它是 PHP 的所谓“数据访问抽象层”。

如果您将应用程序限制为仅使用 SQL99 标准查询,则上述情况在现实生活中应该是正确的;)。

对于即将构建新数据库扩展的扩展开发人员来说,PDO 也是一个可靠的接口。他们可以只写一个驱动程序或 PDO 并且可以使用 PHP 中众所周知的接口 - PDO 接口访问数据库。

结论:

PDO 旨在使 PHP 中跨各种数据库类型的数据库访问相似 如果使用 SQL99 标准查询,只需更改连接字符串即可更改数据库产品 PDO 是一个众所周知的数据库访问接口,可供扩展开发人员使用

【讨论】:

更正,PDO 是数据访问抽象层,而不是数据库抽象层。例如,PDO 无法针对 MySQL 数据库提供 oracle 本地数据库功能的仿真。 us3.php.net/manual/en/intro.pdo.php【参考方案3】:

PDO 使两个不同 DBMS 之间的迁移变得更加容易。有些人还将它用于支持 PDO 支持的所有 DBMS 的应用程序。但请注意,这通常是一种错误的做法:如果您不太了解某个软件,您不应该对您的用户说您支持它,因为您会撒谎——因为您无法解决现实生活中的问题。

mysqli 不是抽象。它是一个快速可靠的 MySQL api,应该是首选。

【讨论】:

以上是关于pdo 相对于 mysql_* 或 mysqli_* 的优势 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如果 PDO 和 mysqli 不可用,使用 mysql_* 函数是不是安全?

PDO是实现mysqli还是mysql

mysql,mysqli和PDO的区别

从 mysql 过渡到 MySQLi 或 PDO

php连接mysql问题

Zend db 适配器 mysqli 或 PDO_MYSQL