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.