Pdo vs mysqli що вибрати

з'єднання

Підключення до бази для обох варіантів:

Зверніть увагу, що ці об'єкти з'єднань / ресурси далі будуть розглядатися як уже існуючі.

підтримка API

Обидва PDO і MySQLi пропонують об'єктно-орієнтована API, але MySQLi так само пропонує і процедурний підхід - що робить його для новачків легше в розумінні. Якщо ви знайомі з нативним PHP драйвером для MySQL, то з легкістю перейдете на процедурний інтерфейс MySQLi. З іншого боку, як тільки ви освоїте PDO, то зможете використовувати його з будь-якою базою даної, як забажаєте.

Підтримка баз даних

Pdo vs mysqli що вибрати

Основна перевага PDO над MySQLi в підтримці різних драйверів. На момент написання цієї статті, PDO підтримує 12 різних драйверів. на відміну від MySQLi, який підтримує тільки MySQL.

Щоб вивести всі підтримувані PDO драйвери, скористайтеся наступним кодом:

Що це означає? У ситуаціях, коли у вашому проекті ви вирішите поміняти базу даних, з PDO цей процес буде досить прозорим. Отже, все що вам потрібно буде зробити. це змінити рядок підключення і кілька запитів, якщо в них використовуються методи, які не підтримуються вашою новою базою даних. З MySQLi вам доведеться переписати кожен рядок коду - включаючи запити.

іменовані параметри

Це ще одна важлива можливість в PDO; прив'язка параметрів набагато зручніше. ніж просто використовувати нумерацію:

а тепер порівняємо з MySQLi підходом:

Прив'язка параметрів за знаком питання може і виглядає коротше, але є такий гнучкою як іменовані параметри, так як розробник завжди повинен пам'ятати порядок параметрів.

На жаль MySQLi не підтримує іменовані параметри.

Відображення на об'єкт

Обидва PDO і MySQLi можуть відображати результати запитів на об'єкти. Це досить приємно, якщо ви не хочете використовувати додатковий рівень абстракції бази, але виглядає як ORM-поведінку. Уявімо, що у нас є клас User з деякими властивостями, які збігаються з іменами полів в базі.

Без використання відображення на об'єкт, нам би довелося заповнювати кожне поле (або вручну, або через конструктор), до того як ми б могли коректно використовувати метод info ().

Це дозволяє нам визначити властивості ще до того, як об'єкт буде створений! наприклад:

Безпека

Pdo vs mysqli що вибрати

Обидві бібліотеки надають захист від SQL ін'єкції, до тих пір поки розробники правильно їх використовують (екранують, застосовують прив'язку параметрів і підготовлені запити)

Припустимо зломщик намагається вставити деякий SQL через GET параметр 'username' в запиті.

Якщо ми не буде екранувати, то це буде вставлено в запит як є, видаляючи таблицю users. так як і PDO і mysqli підтримують множинні запити.

Як бачите, PDO :: quote () не тільки екранує рядок, а й додає лапки. З іншого боку mysqli_real_escape_string () тільки екранує рядок, вам самим потрібно буде додавати лапки.

Я раджу завжди використовувати підготовлені вираження замість PDO :: quote () і mysqli_real_escape_string ().

продуктивність

І PDO і MySQLi досить швидко працюють, MySQLi в показниках незначно вище, приблизно 2.5% для непідготовлених запитів, і приблизно 6.5% для підготовлених. Хоча рідне розширення MySQL ще швидше, ніж ці обидва. Так що якщо вам потрібно отримати максимальну продуктивність, то можете розглянути і його.

висновок

В кінцевому рахунку PDO виграв з легкістю цей бій. З підтримкою дванадцяти різних драйверів баз даних (18 різних баз даних!) І іменованими параметрами, ми можемо спокійній ігнорувати невелику втрату в продуктивності. З точки зору безпеки, обидва розширення безпечні, якщо розробник їх коректно використовує.

Так що, якщо ви до сих пір працюєте з MySQLi, може бути прийшов час це змінити!

Схожі статті