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 только один подход?
- Эта [статья] (http://net.tutsplus.com/tutorials/php/pdo-vs-mysqli-whic ...
Ответ #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();
}
- @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, но это, конечно, субъективно.
Ответ #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 их.
- Возможна привязка результата с динамически генерируемыми запросами, мы делаем это в наших приложениях. ...
Ответ #4
Ответ на вопрос: mysqli или PDO - каковы плюсы и минусы?
PDO — это стандарт, который будет использовать 9X_mysql-server большинство разработчиков. mysqli был, по 9X_mysql-query сути, индивидуальным решением конкретной 9X_php проблемы, но у него есть все проблемы других 9X_mysql-server библиотек, специфичных для СУБД. PDO — это 9X_php.ini место, куда пойдет вся тяжелая работа и 9X_mysqli-fetch-array умное мышление.
Ответ #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 вы хотите помочь сообществу.
- Я думаю, что преимущества, которые предлагает 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 драйверу.
Ответ #7
Ответ на вопрос: mysqli или PDO - каковы плюсы и минусы?
PDO значительно упростит масштабирование, если 9X_php5 ваш сайт / веб-приложение станет действительно 9X_mysql-query функционирующим, поскольку вы можете ежедневно 9X_pdo настраивать соединения Master и Slave для 9X_php-mysqli распределения нагрузки по базе данных, плюс 9X_mysql-server PHP движется к переходу на PDO в качестве 9X_mysqlclient стандарта. .
Ответ #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.
- Джонатен Робсон провел достойное сравнение их скорости на 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 случае проблематично.
- MySQLi подготовил заявления.<p><span cl ...
Ответ #10
Ответ на вопрос: mysqli или PDO - каковы плюсы и минусы?
Отредактированный ответ
Имея некоторый опыт работы с обоими этими 9X_pdo API, я бы сказал, что есть 2 функции уровня 9X_php блокировки, которые делают mysqli непригодным 9X_mysql-query для использования с собственными подготовленными 9X_mysql-query операторами.
Они уже упоминались в двух 9X_php5 отличных (но пока еще недооцененных) ответах:
(оба 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 он имеет меньший уровень абстракции.
Ответ #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).
- Что такое ПГО? И быстре ...
Ответ #12
Ответ на вопрос: mysqli или PDO - каковы плюсы и минусы?
Одна вещь, которая есть у PDO и которой 9X_mysql нет у MySQLi, и которая мне очень нравится, это 9X_php5 способность PDO возвращать результат как 9X_mysql объект определенного типа класса (например, $pdo->fetchObject('MyClass')
). MySQLi 9X_pdo fetch_object()
вернет только объект stdClass
.
- Фактически, вы можете указать класс вручную: «объект mysqli_result :: fetch_object ([string $ class_name [, array $ params]])». stdClass используется только в т ...
-
2
-
4
-
4
-
3
-
11
-
3
-
11
-
3
-
4
-
1
-
3
-
3
-
3
-
4
-
5
-
1
-
4
-
6
-
3
-
3
-
1
-
5
-
1
-
1
-
3
-
10
-
1
-
2
-
2
-
1
-
1
-
2
-
3
-
3
-
4
-
4
-
3
-
3
-
3
-
1
-
1
-
1
-
3
-
2
-
3
-
2
-
2
-
1
-
4
-
3