【问题标题】:Anyone know of a good PHP ORM that DOES NOT use PDO?任何人都知道不使用 PDO 的良好 PHP ORM 吗?
【发布时间】:2011-06-10 03:16:45
【问题描述】:

我正在为一个大型大学校园的一个部门构建一个 web 应用程序,该应用程序最终将在企业服务器上运行(我松散地使用“企业”一词)。

问题是管理员拒绝编译和启用除 SQLite 之外的任何 PDO 扩展。不过他们确实启用了 mysql 和 mysqli,所以这并不是完全的损失。

那么这里有没有人知道不依赖 PDO 作为主要引擎的 PHP 的良好 ORM?

我已经看过 Doctrine 和 Propel(都是优秀的框架),但不知道如何从它们内部剥离 PDO。

编辑:这是我从服务器管理员那里得到的回复:

肖恩,

我们曾多次尝试构建包含 PDO 扩展的 PHP,但均未成功。我们没有成功的原因很复杂,但基本上源于Web环境最初是由一些静态编译的数据库驱动程序库和一些动态编译的数据库驱动程序库组成的,这种混合导致PDO大声抱怨。这样做的原因是由于早期版本的 PHP 5.x 中的一个错误,今天不再是问题(或至少不再是一个问题),但切换很困难,因为更改需要对 php.ini 进行修改。 ini 文件,并且由于每个站点(包括 [server redacted] 上的站点)都有自己的 php.ini(总共大约 22,000 个文件,其中许多是由用户修改的),因此很难推出该更改(并且不进行更改会在从具有未更新文件的帐户提供的页面上导致错误[我不记得它们是否致命])。

【问题讨论】:

  • 您为什么不想使用 PDO?这是您(未来)应该如何连接到您的数据库的方式!
  • 好吧,如果你使用 Propel 1.0(我认为 PDO 在 1.2 中出现)它使用 Creole 作为抽象而不是 PDO(我认为 creole 使用 mysqli 来实现 mysql 的底层连接)。就 Doctrine 而言,您需要实现自己的自定义驱动程序——鉴于其复杂性,我敢肯定这将是一项不小的壮举。
  • 存在 PHP4 的 PDO 仿真,它还提供了 PHP5 上的替代绑定。 xpdo.org 右下角的链接 - 虽然它仍然需要一些重写才能使用它。显然这也是一个不合标准的选择。
  • 你为什么不想要 PDO?
  • 我喜欢 PDO!将要部署的服务器不支持 PDO,管理员拒绝启用它。我被困住了。

标签: php mysql web-applications orm pdo


【解决方案1】:

我想每个现代 ORM 都依赖于 PDO,因为它是一个标准的数据库驱动程序。

如果您启用了MySQLi extension,那么您应该能够编写自己的 PDO(IIRC MySQLi 支持 PDO 所做的一切)。

if (extension_loaded('pdo_mysql') == false) {
    class PDO {
        protected $connection;

        public function __construct($dsn, $username = null, $password = null, array $driver_options = array()) {
            $this->connection = new MySQLi(...);
        }
    }

    class PDOStatement { ... }
    class PDOException extends RuntimeException { ... }
}

您必须实现整个 PDO API,但至少它可以工作。

【讨论】:

  • 现在我不确定 mysqli 和 PDO 接口有多相似。但是,如果某些函数的名称相同并采用相同的参数,则可以将上述方法与 __call 魔术方法一起使用,以将调用传递给 mysqli 对象索引。那么您不必实现整个 PDO 接口,而只需实现名称和/或参数不同的函数。
  • 我认为这就是我最终会选择的。感谢大家的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
相关资源
最近更新 更多