我应该使用pg_*函数还是PDO?

4
我正在使用PostgreSQL数据库启动一个项目。我知道mysql_*函数已经被弃用,最好使用PDO与MySQL数据库进行交互,但是对于PostgreSQL呢?pg_*函数是否已经被弃用或即将被弃用?PDO还是pg_*是与PostgreSQL交互的首选方法?哪一种方法更快,更安全?

1
这个问题不完全是链接问题的副本,因为它涉及到pq_*是否会像msql_*函数一样过时。此处的问题和答案都没有在链接的问题/答案中得到解决。 - thor
4个回答

5
不,pg_* 函数集并没有过时。但是使用PDO可以更自由地改变数据库类型。这种自由是通过使用相同的函数/方法访问几个不同的数据库来实现的。特定于数据库的工作将由使用的PDO驱动程序处理。 mysql 扩展已被标记为过时,而推荐使用 mysqli 而不是 PDO。这是因为原始的旧的 mysql 扩展没有提供预处理语句或调用存储过程等功能。开发人员决定创建一个新的、改进的mysql扩展,并完全替换旧版本。

4

ext/mysql已经弃用,因为它太古老了,而且有一个更好的继承者:ext/mysqli。
ext/pgsql没有被弃用,也没有继承者,它本身就很好,可以作为Postgres数据库的本地接口。

PDO是一种统一的接口,可以在同一API下抽象许多不同的数据库驱动程序。它同样也是一种可行的接口。原生的pgsql接口可能会提供一些特定于Postgres的功能,而PDO在其抽象接口中不支持这些功能。如果需要的话,pgsql API更“接近底层”,这可能是一个优点。但是,除非你知道你需要什么具体的东西,否则你可能找不出太大的区别。

个人喜欢PDO。如果您不确定,我建议您编写一些简单的测试脚本,并根据哪个感觉更舒适以及您更好理解的文档来选择其中之一。也就是说,除非您有其他决定因素,例如通过PDO提供的抽象轻松切换到其他数据库的灵活性。


3
除非你计划在未来更换数据库,否则选择哪种方法 - 面向对象的方法还是老派的函数调用方法,取决于你更加熟悉哪种方法。你的应用程序的安全性并不取决于PDO/pg_*函数,而是取决于你使用的安全编程方法,例如预处理语句(http://be.php.net/manual/en/pdo.prepare.php),这在两种风格中都可用。
你还可以考虑使用抽象层,例如支持记录集缓存(http://phplens.com/adodb/caching.of.recordsets.html)和其他巧妙功能的ADOdb。

1
如果您知道将使用Postgresql作为此项目的RDBMS,则最好使用Postgresql扩展而不是PDO。
PDO本质上是一个抽象层-据传说,如果您利用本机pg_函数,则可以获得更好的性能。如果可能的话,请进行一些基准测试以获取更好的想法。
推荐阅读: PDO vs pg_* functions

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接