【问题标题】:Is SQL used by PDO database independent?PDO数据库使用的SQL是独立的吗?
【发布时间】:2010-05-14 17:44:52
【问题描述】:

不同的数据库在 SQL 的实现上略有不同。 PDO 会处理这个吗?

如果我编写一个与 PDO 一起使用的 SQL 查询来访问 MySQL 数据库,然后告诉 PDO 开始使用不同类型的数据库,该查询会停止工作吗?还是 PDO 会“转换”查询以使其继续工作?

如果 PDO 不这样做,是否有任何 PHP 库允许我根据特定语法编写 SQL,然后该库将处理转换 SQL 以便它可以在不同的数据库上运行?

【问题讨论】:

    标签: php database pdo


    【解决方案1】:

    来自 PHP 手册:

    PDO 提供数据访问抽象 层,这意味着,无论 你正在使用哪个数据库,你使用 发出查询的相同功能 并获取数据。 PDO 不提供 数据库抽象; 它没有 重写 SQL 或模拟缺失 功能。你应该使用一个 成熟的抽象层,如果你 需要那个设施。

    因此,您不能更改数据库并期望一切都像以前一样工作。这取决于您使用的查询。它们是“简单”的 SQL92 查询,还是针对特定数据库使用特殊功能......

    例如,必须重写具有“LIMIT 10,20”的 mysql 查询才能使用 Oracle DB 或 Sqlite。他们使用“LIMIT 20 OFFSET 10”

    【讨论】:

    • 和 MSSQL 上完全不同的东西。
    • 我查看了手册但找不到任何东西;显然你比我更细心!
    【解决方案2】:

    PHP 没有自动为您转换 SQL 的库。如果你想要那种功能,你应该看看像 Doctrine 这样的ORM 实现。当然要付出代价,因为在项目中使用它需要学习曲线,而且编写 SQL 不再像编写字符串那样简单。您应该问自己是否绝对需要独立于数据库的代码。

    【讨论】:

    • 不幸的是,没有办法绕过需要编写独立于数据库的代码。不过,谢谢推荐。我看过 ORM,它们并不是我真正想要的,但你只是给了我一个想法,让我看看它们的源代码,看看它们如何生成查询并尝试自己实现一些东西。
    • 也有类似 MDB2 的东西:主要是 SQL,但有几个 PHP 函数调用代替了“限制”代码。
    • @Narcissus:谢谢!我目前正在阅读文档,到目前为止,它看起来就像我所追求的。
    猜你喜欢
    • 2011-02-02
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 2011-06-15
    • 1970-01-01
    相关资源
    最近更新 更多