В чем разница между MySQL, MySQLi и PDO? [закрыто]

128

В чем разница между MySQL, MySQLi и PDO ?

Какой из них лучше всего подходит для использования с PHP-MySQL?

Чинтан Парех
источник

Ответы:

100

Существует (более) трех популярных способов использования MySQL из PHP. Здесь описаны некоторые особенности / отличия PHP: Выбор API :

  1. ( УСТАРЕЛО ) Функции mysql являются процедурными и используют экранирование вручную.
  2. MySQLi - это замена функций mysql с объектно-ориентированной и процедурной версиями. Он поддерживает подготовленные заявления.
  3. PDO (объекты данных PHP) - это общий уровень абстракции базы данных с поддержкой MySQL среди многих других баз данных. Он обеспечивает подготовленные операторы и значительную гибкость в том, как возвращаются данные.

Я бы рекомендовал использовать PDO с подготовленными операторами. Это хорошо спроектированный API, который при необходимости позволит вам легко перейти к другой базе данных (включая любую, поддерживающую ODBC ).

Мэтью Флашен
источник
9
Часто возникает путаница, что для процедурных вы должны использовать функции mysql _ * (), а для объектно-ориентированного программирования вы используете mysqli! Дело в том, что mysqli полностью заменяет раннюю (PHP 4) реализацию mysql. С mysqli можно использовать как процедурный стиль, так и объектно-ориентированный.
Patrick Allaert
@ Патрик, спасибо. Я исправил это.
Мэтью Флашен
46

Это разные API для доступа к серверной части MySQL.

  • MySQL является историческим API
  • MySQLi новая версия исторического API. Он должен работать лучше и иметь лучший набор функций. Кроме того, API является объектно-ориентированным.
  • PDO_MySQL , это MySQL для PDO. PDO был введен в PHP, и проект направлен на создание общего API для доступа всех баз данных, поэтому теоретически вы должны иметь возможность мигрировать между RDMS без изменения кода (если вы не используете конкретную функцию RDBM в своих запросах ), также объектно-ориентированный.

Так что это зависит от того, какой код вы хотите создать. Если вы предпочитаете объектно-ориентированные слои или простые функции ...

Мой совет был бы

  1. PDO
  2. MySQLi
  3. MySQL

Также мне кажется, что mysql API, вероятно, будет удален в будущих выпусках PHP.

RageZ
источник
3
Это больше не чувство: PHP7 удалил mysql API, оставив PDO и mysqli
Мануэль
3

mysqli - это расширенная версия mysql.

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

Sarfraz
источник
4
копирование из ручного файла не очень полезно.
XuDing
3

В частности, расширение MySQLi обеспечивает следующие чрезвычайно полезные преимущества по сравнению со старым расширением MySQL.

Интерфейс ООП (в дополнение к процедурному) Подготовленный оператор Поддержка транзакций + Поддержка хранимых процедур Более качественное улучшение скорости синтаксиса Улучшенная отладка

Расширение PDO

Расширение PHP Data Objects - это уровень абстракции базы данных. В частности, это не интерфейс MySQL, поскольку он предоставляет драйверы для многих механизмов баз данных (конечно, включая MYSQL).

PDO стремится предоставить согласованный API, который означает, что при изменении механизма базы данных изменения кода, отражающие это, должны быть минимальными. При использовании PDO ваш код обычно будет «просто работать» во многих ядрах баз данных, просто изменив драйвер, который вы используете.

Помимо совместимости с разными базами данных, PDO также поддерживает подготовленные операторы, хранимые процедуры и многое другое при использовании драйвера MySQL.


источник