В чем преимущество использования моделей Zend_Db над mysqli?

#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.