我正在使用PostgreSQL数据库启动一个项目。我知道mysql_ *函数已被弃用,最好将PDO与MySQL数据库一起使用,但是PostgreSQL呢? pg_ *函数是否已弃用或正在被弃用? PDO或pg_ *是与postgres交谈的首选方法吗?一个比另一个更快还是更安全?
答案 0 :(得分:4)
不,不推荐使用pg_*
个函数集。但是使用PDO可以更自由地更改一次数据库类型。通过使用相同的功能/方法来访问几个不同的数据库来实现这种自由。特定于数据库的工作将由正在使用的PDO驱动程序处理。
mysql
扩展程序已被标记为已弃用,有利于mysqli
,而不支持PDO
。这是因为原始的旧mysql
扩展没有提供准备语句或调用存储过程等功能。开发人员决定创建一个新的,改进的mysql扩展,并完全替换旧的扩展。
答案 1 :(得分:2)
除非您计划将来切换数据库,否则它实际上取决于您更熟悉的内容 - OOP方法还是老派函数调用方法。您的应用程序的安全性不依赖于PDO / pg_ *函数,而是依赖于您使用安全编程方法,例如两种样式都可用的预处理语句(http://be.php.net/manual/en/pdo.prepare.php)。
您还可以考虑使用ADOdb这样的抽象层,它支持记录集缓存(http://phplens.com/adodb/caching.of.recordsets.html)和其他漂亮的功能。
答案 2 :(得分:2)
ext / mysql已被弃用,因为它很古老,并且有更好的继承者:ext / mysqli。
ext / pgsql不被弃用且没有后继,它很好,你可以将它用作本机Postgres数据库接口。
PDO是一个统一的接口,用于在同一API下抽象许多不同的数据库驱动程序。 也是一个可行的界面。本机pgsql接口可能提供或不提供某些特定于Postgres的特定功能,PDO在其抽象接口中不支持这些功能。如果你愿意,pgsql API“更接近金属”,如果你需要它可能是一个优势。但是,除非你知道你需要的某些具体事情,否则你可能不会发现太大的不同。
我个人喜欢PDO。如果您不确定,我会尝试编写一些简单的测试脚本,并根据哪种感觉更舒适以及您更了解哪些文档来决定一个或另一个。也就是说,除非你有其他一些决定因素,例如通过PDO提供的抽象更容易切换到其他数据库的灵活性。
答案 3 :(得分:1)
如果你知道你将坚持使用Postgresql作为这个项目的RDBMS,那么你最好用Postgresql扩展而不是PDO。
PDO本质上是一个抽象层 - 有趣的是,如果你使用原生的pg_函数,你将获得更好的性能。如果可能的话,做一些基准来获得更好的想法。推荐阅读: PDO vs pg_* functions