Я создаю webapp для отдела в большом университетском городке, который в конечном итоге будет запущен на корпоративных серверах (я использую термин «предприятие» свободно).
Проблема в том, что администраторы отказались компилировать и включить любое расширение PDO, отличное от SQLite. У них действительно есть mysql и mysqli, но это не полная потеря.
Значит, кто-нибудь из нас знает хороший ORM для PHP, который НЕ полагается на PDO, поскольку это основной движок?
Я уже посмотрел на Doctrine and Propel (оба отличные рамки), хотя не мог понять, как вырезать PDO изнутри.
Изменить : вот ответ, который я получил от администраторов на сервере:
Шон,
Мы пытались, безуспешно, несколько раз строить PHP с включенным расширением PDO. Причина, по которой мы не были успешными, сложна, но в основном проистекает из того факта, что веб-среда была первоначально настроена с некоторыми библиотеками драйверов базы данных, скомпилированными статически, а другие скомпилированы динамически, а смешение вызывает PDO громко. Причина в том, что все было сделано таким образом, было связано с ошибкой в ранних версиях PHP 5.x, которая сегодня не является проблемой (или, по крайней мере, менее одной), но переключение затруднено, потому что для изменения потребуются изменения в php. ini, и поскольку каждый сайт (включая сайты на [ server redacted ]) имеет свой собственный php.ini (примерно 22 000 файлов, многие из которых модифицированы пользователями), очень сложно вытеснить это изменение (и не создавать изменение вызывает ошибки [я не помню, если они являются фатальными или нет] на страницах, обслуживаемых с учетных записей с не обновляемыми файлами).
Я полагаю, что каждый современный 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 { ... } }
Вам придется реализовать весь PDO API, но по крайней мере он будет работать.