MySQL проти MySQLi при використанні PHP [закрито]


167

Що краще, MySQL чи MySQLi? І чому? Який я повинен використовувати?

Я маю на увазі краще не просто з точки зору продуктивності, а будь-якої іншої відповідної функції.

Відповіді:


111

Якщо ви ознайомилися з оглядом покращеного розширення MySQL , він повинен повідомити вам все, що вам потрібно знати про відмінності між ними.

Основні корисні функції:

  • об'єктно-орієнтований інтерфейс
  • підтримка підготовлених заяв
  • підтримка декількох заяв
  • підтримка транзакцій
  • розширені можливості налагодження
  • підтримка вбудованого сервера.

1
так, найкраще те, що mysqli підтримує підготовлені заяви
квітня 2011 року

7
Слід також зазначити, що MySQLi працює лише з MySQL 5+. Це вже не актуально, але коли MySQLi вийшов, MySQL 4 все ще був стандартом. Це є причиною того, що розширення є окремими, колишній драйвер MySQL залишається там для сумісності.
zneak

6
Варто зазначити, що за шість років все сильно змінилося. mysql_*()тепер застаріла і незабаром буде видалена . Не слід використовувати його для нового коду.

Що нам вибрати з меншим процесором та оперативною пам’яттю?
Махді Джазіні

1
Дивіться відповідь Гордона нижче. Старе розширення mysql більше не підтримується, тому ви все одно будете краще використовувати розширення mysqli.
Марк Девідсон

70

Існує сторінка керівництва, присвячена допомозі вибору між mysql, mysqli та PDO на

Команда PHP рекомендує mysqli або PDO_MySQL для нової розробки:

Рекомендується використовувати або розширення mysqli, або PDO_MySQL. Не рекомендується використовувати старе розширення mysql для нової розробки. Нижче представлена ​​детальна матриця порівняння функцій. Загальна продуктивність усіх трьох розширень вважається приблизно однаковою. Хоча продуктивність розширення сприяє лише частці загального часу запуску веб-запиту PHP. Найчастіше вплив становить від 0,1%.

На сторінці також є матриця функцій, яка порівнює API розширення. Основні відмінності між mysqli та mysql API полягають у наступному:

                               mysqli     mysql
Development Status             Active     Maintenance only
Lifecycle                      Active     Long Term Deprecation Announced*
Recommended                    Yes        No
OOP API                        Yes        No
Asynchronous Queries           Yes        No
Server-Side Prep. Statements   Yes        No
Stored Procedures              Yes        No
Multiple Statements            Yes        No
Transactions                   Yes        No
MySQL 5.1+ functionality       Yes        No

* http://news.php.net/php.internals/53799

Існує додаткова матриця функцій, яка порівнює бібліотеки (новий mysqlnd проти libmysql) на

і дуже ретельна стаття в блозі на сайті


15

Я відмовився від використання mysqli. Це просто занадто нестабільно. У мене були запити, які розбивають PHP за допомогою mysqli, але добре працюють з пакунком mysql. Також mysqli збоїв у стовпцях LONGTEXT . Ця помилка піднімалася в різних формах щонайменше з 2005 року та залишається порушеною . Я чесно хотів би використовувати підготовлені заяви, але mysqli просто недостатньо надійний (і, здається, ніхто не турбує це виправити). Якщо ви дійсно хочете підготованих заяв, перейдіть із PDO


2
PDO теж не зовсім ідеальний (я зіткнувся з деякими неприємними кореспонденціями з ним), але, принаймні, він має більш широку базу користувачів, тому це, мабуть, більш безпечна ставка.
troelskn

@troelskn, тож чи не нормальний mysql просто краще?
Pacerier

@Pacerier Враховуючи, що це застаріло, я б сказав "ні". Загалом, здається, що PDO стали стандартним вибором.
troelskn

@troelskn, але застаріле не означає нічого, крім того, що його не було б у наступних версіях. З точки зору стабільності, не є нормальний mysql стабільнішим?
Pacerier

1
У цей момент (5.5) PHP активно видаватиме попередження, якщо ви його використовуєте: php.net/manual/en/migration55.deprecated.php
troelskn

13

MySQLi покращує розширення MySQL. Це об'єктно-орієнтований інтерфейс до прив'язок MySQL, який полегшує використання. Він також пропонує підтримку підготовлених заяв (які дуже корисні). Якщо ви перебуваєте на PHP 5, використовуйте MySQLi.


5

Що краще - PDO; це менш надійний інтерфейс, а також забезпечує ті ж функції, що і MySQLi.

Використання підготовлених операторів добре, оскільки воно виключає можливості введення SQL; використання готових заяв на стороні сервера є поганим, оскільки збільшує кількість туди-назад.


3

для мене підготовлені заяви є обов'язковою особливістю. точніше, прив'язка параметрів (яка працює лише на підготовлених операторах). це єдиний дійсно розумний спосіб вставити рядки в команди SQL. я дійсно не довіряю функціям "втечі". з'єднання БД є бінарним протоколом, чому для параметрів використовувати підпротокол з обмеженою ASCII?


1
PDO зазвичай використовує готові до клієнта заяви, тому вони насправді не підготовлені на сервері - але це добре, оскільки це економить серверні ресурси і зазвичай працює краще. Підготовлений вислів "емуляція" завжди буде уникати речей правильно.
MarkR

1
"завжди" та "втеча" - це небезпечні слова, коли йдуть разом. я не знаю, можливо, цей код є повністю помилковим; але навіщо турбуватися, коли наявний справжній бінарний протокол? що стосується продуктивності, це відкрито для тестування.
Хав'єр
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.