Кто-нибудь знает хороший PHP ORM, который не использует PDO? - PullRequest
3 голосов
/ 17 января 2011

Я создаю веб-приложение для отдела в большом кампусе колледжа, которое в конечном итоге будет работать на корпоративных серверах (я свободно использую термин «предприятие»).

Проблема в том, чтоадминистраторы отказались компилировать и включать любое расширение PDO, кроме SQLite.В них действительно включены mysql и mysqli, так что это не полная потеря.

Так кто-нибудь знает о хорошем ORM для PHP, который НЕ полагается на PDO в качестве основного движка?

Я уже смотрел на Doctrine и Propel (оба отличных фреймворка), хотя не мог понять, как вырывать PDO из них.

Редактировать : ВотОтвет, полученный от администраторов на сервере:

Шон,

Мы несколько раз безуспешно пытались собрать PHP с включенным расширением PDO.Причина, по которой мы не добились успеха, сложна, но в основном проистекает из того факта, что веб-среда изначально была настроена с некоторыми библиотеками драйверов баз данных, скомпилированными статически, а другие динамически скомпилированными, что вызвало громкую жалобу PDO.Причина, по которой все было сделано таким образом, произошла из-за ошибки в ранних версиях PHP 5.x, которая больше не является проблемой сегодня (или, по крайней мере, одной из них), но переключение затруднительно, потому что изменение потребует внесения изменений в php.INI-файлы и, поскольку каждый сайт (включая сайты на [ сервер отредактирован ]) имеет свой собственный файл php.ini (всего около 22 000 файлов, многие из которых изменены пользователями), очень трудно вытолкнуть этоизменение (а не внесение этого изменения приводит к ошибкам [я не помню, являются ли они фатальными или нет) на страницах, обслуживаемых аккаунтами с необновленными файлами).

1 Ответ

3 голосов
/ 17 января 2011

Я полагаю, что каждый современный ORM полагается на PDO, поскольку это стандартный драйвер базы данных.

Если у вас включено расширение MySQLi , то вы сможете написать свой собственный 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 { ... }
}

Вам потребуется реализовать весь API-интерфейс PDO, но по крайней мере он будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...