#php #zend-framework #mysqli #zend-db
#php #zend-фреймворк #mysqli #zend-db
Вопрос:
Я только начал использовать ZF, и есть несколько очень удобных библиотек, которые экономят мне много времени, но я не вижу преимущества в использовании их класса Zend_Db по сравнению с mysqli. Мне не нужен PDO, так как я всегда буду использовать MySQL в качестве СУБД. И действительно, как часто вы меняете свою СУБД в середине проекта?
И я очень хорошо разбираюсь в SQL, поэтому мне не нужна их абстракция, которая просто сбивает меня с толку.
Итак, какое преимущество есть перед этим кодом mysqli в моих конструкторах классов, а затем просто SQL-запросами, когда они мне нужны?
require_once("database_details.php");
$this->_mysql=new mysqli(DBSERVERHOST,DBUSERNAME,DBPASSWORD,DBNAME);
Ответ №1:
Я не люблю ZF, но голый mysqli просто уродлив. Какой у вас код, чтобы получить несколько строк для заполнения шаблона?
Давайте предположим, что это так же печально, как
$query = "SELECT * FROM myCity WHERE Name=? AND CountryCode=? AND District=?";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("sss", $val1, $val2, $val3);
$stmt->execute();
$data = array();
if ($result = $mysqli->query($query)) {
while ($row = $result->fetch_row()) {
$data[] = $row;
}
(это просто простой пример из руководства, без каких-либо обязательных вещей, таких как обработка ошибок)
В то время как с некоторой библиотекой вы можете сделать это как
$data=$db->getArr("SELECT * FROM myCity WHERE Name=? AND CountryCode=? AND District=?"
$val1, $val2, $val3);
просто посчитайте количество запросов в вашем обычном скрипте и почувствуйте разницу.
Также обратите внимание, что ваш драгоценный SQL не поврежден!
Комментарии:
1. Я полагаю, это действительно выглядит немного более элегантно. Мне пришлось поискать слово «скорбный» в словаре.
Ответ №2:
Есть много преимуществ. Я не знаю их всех, но две просто выдающиеся:
1) Зависимость от адаптера / независимость кода Независимо от того, какую базу данных вы используете — код для ваших запросов НИКОГДА не меняется.
$db->select()->where('a=?', $b)->order('C DESC')->limit(5);
Не имеет значения, является ли ваш адаптер MySQL, PGSQL, MSSQL и т. Д. … Я думаю, что даже некоторые базы данных NoSQL поддерживаются Zend с теми же форматами запросов
2) Кэширование При использовании библиотеки для запросов — особенно с Zend или Doctrine (совместимо!) — кэширование ваших запросов к БД — это кусок пирога. Делайте это вручную для каждого из ваших запросов, и вы обречены на кучу кода: P
3) Удобочитаемость Лично я просто чувствую, что использование библиотеки (может быть и вашей собственной) также имеет много преимуществ для удобства чтения
Комментарии:
1. 1) не является реальным преимуществом, как упоминалось в OP, и 2) должно быть не таким тупым, как результат кэширования запроса, немного более интеллектуальным, управляемым на уровне контроллера.
2. Ну, OP может быть прав в том смысле, что запущенный проект не меняет свою СУБД. Но когда отправляется новый проект, и клиент специально хочет другую СУБД, тогда вам не нужно все переосмысливать. Просто предоставьте другой адаптер, а затем просто делайте то, что делаете всегда. Никаких новых функций, все те же старые вещи 🙂 И, очевидно, 2) может быть больше — это был просто приведенный пример
3. 1 и 3 — да. Кэширование нет, так как мои приложения редко посещают более 100 пользователей (только внутренние материалы — к сожалению)
4. Я имею в виду 1. Какие базы данных вы переключили?
5. Как упоминалось ранее, запущенный проект не изменяет свою базу данных. Но мне пришлось дважды использовать Postgres.