mysqli или PDO - каковы плюсы и минусы?

Мы используем mysqli и PDO для таких вещей, как 9X_mysql-query подготовленные операторы и поддержка транзакций. В 9X_php-frameworks некоторых проектах используется одно, в 9X_mysqlclient некоторых другое. Маловероятно, что мы когда-нибудь 9X_php-fpm перейдем на другую СУБД.

Я предпочитаю PDO 9X_pdo по той единственной причине, что он допускает 9X_php-mysqli именованные параметры для подготовленных 9X_mysql-server операторов, а mysqli, насколько мне известно, этого 9X_php-fpm не делает.

Есть ли другие плюсы и минусы 9X_mysqli выбора одного из двух в качестве стандарта, поскольку 9X_php мы объединяем наши проекты, чтобы использовать 9X_mysql-server только один подход?

343
1

  • Эта [статья] (http://net.tutsplus.com/tutorials/php/pdo-vs-mysqli-whic ...
12
Общее количество ответов: 12

Ответ #1

Ответ на вопрос: mysqli или PDO - каковы плюсы и минусы?

Что ж, вы можете поспорить с объектно-ориентированным 9X_php-fpm аспектом, подготовленными операторами, тем 9X_php-frameworks фактом, что он становится стандартом, и 9X_php-mysqli т. д. Но я знаю, что в большинстве случаев 9X_php.ini убеждение кого-то лучше работает с помощью 9X_php.ini убойной функции. Итак, вот оно:

Действительно 9X_mysql-server хорошая вещь с PDO - это то, что вы можете 9X_php5 извлекать данные, автоматически вставляя 9X_php5 их в объект. Если вы не хотите использовать 9X_php-frameworks ORM (потому что это просто быстрый сценарий), но 9X_mysql-server вам нравится сопоставление объектов, это 9X_php-fpm ДЕЙСТВИТЕЛЬНО круто:

class Student { public $id; public $first_name; public $last_name public function getFullName() { return $this->first_name.' '.$this->last_name } } try { $dbh = new PDO("mysql:host=$hostname;dbname=school", $username, $password) $stmt = $dbh->query("SELECT * FROM students"); /* MAGIC HAPPENS HERE */ $stmt->setFetchMode(PDO::FETCH_INTO, new Student); foreach($stmt as $student) { echo $student->getFullName().'
'; } $dbh = null; } catch(PDOException $e) { echo $e->getMessage(); }

243
10

  • @Mattygabe: к сожалению, слишком много разработчиков, которые только начинают, не осознают, что есть проблемы с образцом кода, и будут копировать его, а не понимать. Если часть приме ...

Ответ #2

Ответ на вопрос: mysqli или PDO - каковы плюсы и минусы?

Перемещение приложения из одной базы данных 9X_mysql в другую не очень распространено, но рано 9X_php-fpm или поздно вы можете обнаружить, что работаете 9X_mysql над другим проектом, используя другую СУБД. Если 9X_mysql-query вы дома с PDO, то в этот момент вам будет 9X_mysqldump как минимум на одну вещь меньше учиться.

Кроме 9X_php того, я нахожу PDO API немного более интуитивным 9X_database-abstraction и более объектно-ориентированным. mysqli 9X_php5 кажется просто процедурным API, который 9X_php5 был объективирован, если вы понимаете, о 9X_mysql-server чем я. Короче говоря, мне проще работать 9X_pdo с PDO, но это, конечно, субъективно.

57
0

Ответ #3

Ответ на вопрос: mysqli или PDO - каковы плюсы и минусы?

Я начал использовать PDO, потому что, на 9X_mysql-server мой взгляд, поддержка операторов лучше. Я 9X_mysqli-fetch-array использую уровень доступа к данным в стиле 9X_php.ini ActiveRecord, и гораздо проще реализовать 9X_mysql динамически генерируемые операторы. Привязка 9X_php-fpm параметров MySQLi должна выполняться в одном 9X_mysql-server вызове функции/метода, поэтому, если вы 9X_mysql-server не знаете до времени выполнения, сколько 9X_php-fpm параметров вы хотите связать, вы вынуждены 9X_mysql-server использовать call_user_func_array() (я считаю, что это правильное 9X_mysql-query имя функции ) для избранных. И забудьте 9X_php.ini о простой динамической привязке результатов.

Больше 9X_php5 всего мне нравится PDO, потому что это очень 9X_database-abstraction разумный уровень абстракции. Его легко использовать 9X_php в полностью абстрактных системах, где вы 9X_mysql-query не хотите писать SQL, но он также позволяет 9X_pdo легко использовать более оптимизированный, чистый 9X_database-abstraction тип системы запросов или смешивать и сочетать 9X_mysql-server их.

25
1

  • Возможна привязка результата с динамически генерируемыми запросами, мы делаем это в наших приложениях. ...

Ответ #4

Ответ на вопрос: mysqli или PDO - каковы плюсы и минусы?

PDO — это стандарт, который будет использовать 9X_mysql-server большинство разработчиков. mysqli был, по 9X_mysql-query сути, индивидуальным решением конкретной 9X_php проблемы, но у него есть все проблемы других 9X_mysql-server библиотек, специфичных для СУБД. PDO — это 9X_php.ini место, куда пойдет вся тяжелая работа и 9X_mysqli-fetch-array умное мышление.

17
0

Ответ #5

Ответ на вопрос: mysqli или PDO - каковы плюсы и минусы?

Вот еще кое-что, о чем следует помнить: на 9X_php-mysqli данный момент (PHP 5.2) библиотека PDO содержит ошибки . Там 9X_php-frameworks полно странных ошибок. Например: перед сохранением 9X_mysql-server PDOStatement в переменной, переменная должна быть unset(), чтобы 9X_php-fpm избежать множества ошибок. Большинство из 9X_mysql-query них было исправлено в PHP 5.3, и они будут 9X_mysqlclient выпущены в начале 2009 года в PHP 5.3, в 9X_mysql котором, вероятно, будет много других ошибок. Вам 9X_php-fpm следует сосредоточиться на использовании 9X_php-mysqli PDO для PHP 6.1, если вы хотите стабильный 9X_php-mysqli выпуск, и на использовании PDO для PHP 5.3, если 9X_php-frameworks вы хотите помочь сообществу.

15
2

  • Я думаю, что преимущества, которые предлагает PDO, заслуживают понимания и работы над ошибками. Сам PHP полон очень отягчающих ошибок, некоторые из которых мы даже не можем эффективно устранить, и, тем ...

Ответ #6

Ответ на вопрос: mysqli или PDO - каковы плюсы и минусы?

Еще одно заметное (хорошее) отличие PDO 9X_mysqldump заключается в том, что его метод PDO::quote() автоматически 9X_mysql-query добавляет заключительные кавычки, тогда 9X_php-mysqli как mysqli::real_escape_string() (и подобные) этого не делают:

PDO :: quote() помещает 9X_database-abstraction кавычки вокруг входной строки (если требуется) и экранирует 9X_mysqldump специальные символы во входной строке, используя 9X_php-fpm кавычки стиль, соответствующий базовому 9X_php5 драйверу.

10
0

Ответ #7

Ответ на вопрос: mysqli или PDO - каковы плюсы и минусы?

PDO значительно упростит масштабирование, если 9X_php5 ваш сайт / веб-приложение станет действительно 9X_mysql-query функционирующим, поскольку вы можете ежедневно 9X_pdo настраивать соединения Master и Slave для 9X_php-mysqli распределения нагрузки по базе данных, плюс 9X_mysql-server PHP движется к переходу на PDO в качестве 9X_mysqlclient стандарта. .

PDO Info

Scaling a Web Application

8
0

Ответ #8

Ответ на вопрос: mysqli или PDO - каковы плюсы и минусы?

В смысле скорости выполнения MySQLi выигрывает, но 9X_mysqli-fetch-array если у вас нет хорошей оболочки, использующей 9X_php.ini MySQLi, его функции, работающие с подготовленными 9X_php5 операторами, ужасны.

У меня все еще есть 9X_pdo ошибки, но если кому-то это нужно, here it is.

Короче 9X_php-frameworks говоря, если вы ищете увеличения скорости, то 9X_php.ini MySQLi; если хотите простоты использования, то 9X_mysql-server PDO.

6
3

  • Джонатен Робсон провел достойное сравнение их скорости на http://jonathanrobson.me/2010/06/mysqli-vs-pdo-benchmarks. Резюме: `insert`s - почти равно,` select`s - mysqli на ~ 2,5% ...

Ответ #9

Ответ на вопрос: mysqli или PDO - каковы плюсы и минусы?

Лично я использую PDO, но думаю, что это 9X_pdo в основном вопрос предпочтений.

PDO имеет 9X_php.ini некоторые функции, которые помогают против 9X_php-mysqli SQL-инъекций (prepared statements), но если вы будете осторожны 9X_php-mysqli со своим SQL, вы также можете добиться этого 9X_php с помощью mysqli.

Переход на другую базу 9X_mysql данных не столько повод использовать PDO. Пока 9X_php-frameworks вы не используете «специальные функции SQL», вы 9X_php-mysqli можете переключаться с одной БД на другую. Однако, как 9X_mysqldump только вы используете, например, «SELECT 9X_mysql-server ... LIMIT 1», вы не можете перейти к MS-SQL, где 9X_mysqldump это «SELECT TOP 1 ...». Так что это в любом 9X_php-fpm случае проблематично.

5
1

  • MySQLi подготовил заявления.<p><span cl ...

Ответ #10

Ответ на вопрос: mysqli или PDO - каковы плюсы и минусы?

Отредактированный ответ

Имея некоторый опыт работы с обоими этими 9X_pdo API, я бы сказал, что есть 2 функции уровня 9X_php блокировки, которые делают mysqli непригодным 9X_mysql-query для использования с собственными подготовленными 9X_mysql-query операторами.
Они уже упоминались в двух 9X_php5 отличных (но пока еще недооцененных) ответах:

  1. Binding values to arbitrary number of placeholders
  2. Returning data as a mere array

(оба 9X_php-mysqli также упомянуты в this answer)

По какой-то причине mysqli 9X_database-abstraction не удалось использовать оба варианта.
В 9X_database-abstraction настоящее время он получил некоторые улучшения 9X_mysqlclient для второго (get_result), но он работает только с 9X_database-abstraction установками mysqlnd, что означает, что вы 9X_mysqlclient не можете полагаться на эту функцию в своих 9X_php-frameworks сценариях.

Тем не менее, привязка по значению 9X_mysqldump отсутствует даже по сей день.

Итак, есть 9X_database-abstraction только один выбор: PDO

Все остальные причины, например

  • именованные заполнители (этот синтаксический сахар сильно переоценен)
  • поддержка различных баз данных (на самом деле никто никогда не использовал)
  • получить в объект (просто бесполезный синтаксический сахар)
  • разница в скорости (нет)

не 9X_mysqli имеют большого значения.

В то же время в 9X_mysqli обоих этих API отсутствуют некоторые действительно важные функции, например

  • заполнитель идентификатора
  • заполнитель для сложных типов данных, чтобы сделать динамическое связывание менее утомительным.
  • более короткий код приложения.

Итак, чтобы 9X_php5 удовлетворить реальные жизненные потребности, нужно 9X_mysqldump создать свою собственную библиотеку абстракций 9X_mysql на основе одного из этих API, реализующих 9X_php5 вручную анализируемые заполнители. В этом 9X_mysql-server случае я бы предпочел mysqli, поскольку 9X_mysqli-fetch-array он имеет меньший уровень абстракции.

5
0

Ответ #11

Ответ на вопрос: mysqli или PDO - каковы плюсы и минусы?

В моем benchmark script каждый метод проверяется 10000 раз, и 9X_php5 печатается разница общего времени для каждого 9X_mysqli-fetch-array метода. Вы должны это сделать в своей конфигурации, я 9X_mysql-server уверен, что результаты будут другими!

Вот 9X_mysql-query мои результаты:

  • "SELECT NULL" -> PGO() быстрее примерно на 0,35 секунды
  • "SHOW TABLE STATUS" -> mysqli() быстрее примерно на 2,3 секунды
  • "SELECT * FROM users" -> mysqli() быстрее примерно на 33 секунды

Примечание: при использовании 9X_mysqldump -> fetch_row() для mysqli имена столбцов 9X_php-frameworks не добавляются в массив, я не нашел способа 9X_php-fpm сделать это в PGO. Но даже если я использую 9X_mysqlclient -> fetch_array(), mysqli будет немного 9X_pdo медленнее, но все же быстрее, чем PGO (за 9X_php-fpm исключением SELECT NULL).

4
1

  • Что такое ПГО? И быстре ...

Ответ #12

Ответ на вопрос: mysqli или PDO - каковы плюсы и минусы?

Одна вещь, которая есть у PDO и которой 9X_mysql нет у MySQLi, и которая мне очень нравится, это 9X_php5 способность PDO возвращать результат как 9X_mysql объект определенного типа класса (например, $pdo->fetchObject('MyClass')). MySQLi 9X_pdo fetch_object() вернет только объект stdClass.

3
1

  • Фактически, вы можете указать класс вручную: «объект mysqli_result :: fetch_object ([string $ class_name [, array $ params]])». stdClass используется только в т ...