Чому не варто використовувати функції mysql_* у PHP?

pic

Функції mysql_* у PHP (наприклад, mysql_query(), mysql_connect() тощо) вважаються застарілими і не повинні використовуватися з наступних причин.


1. Застарілість та видалення з PHP

  • Функції mysql_* були офіційно визнані застарілими у PHP 5.5.0 (2013) і видалені у PHP 7.0.0 (2015).
  • Якщо ви використовуєте сучасну версію PHP, ці функції більше недоступні.

2. Відсутність безпеки

  • Функції mysql_* не підтримують підготовлені запити (prepared statements), що залишає ваш код вразливим до SQL-ін'єкцій.
  • Атаки SQL-ін'єкцій можуть скомпрометувати вашу базу даних і розкрити конфіденційні дані.
  • Альтернативи, такі як PDO або MySQLi, забезпечують безпечні параметризовані запити.

Приклад вразливості SQL-ін'єкції з mysql_query.

// Вразливий до SQL-ін'єкції  
$userInput = "' OR 1=1 --";  
$query = "SELECT * FROM users WHERE username = '$userInput'";  
$result = mysql_query($query);

3. Відсутність підтримки сучасних функцій

  • Функції mysql_* не підтримують сучасні можливості баз даних, такі як:
    • Транзакції
    • Підготовлені запити (Prepared Statements)
    • Збережені процедури
    • Виконання кількох запитів за один раз
  • Ці функції є критично важливими для безпечної та ефективної роботи з базами даних.

4. Обмежена обробка помилок

  • Функції mysql_* мають дуже обмежену та застарілу обробку помилок.
  • Сучасні розширення, такі як PDO та MySQLi, забезпечують потужну обробку помилок за допомогою виключень (Exceptions), що значно полегшує налагодження.

5. Відсутність об'єктно-орієнтованого інтерфейсу

  • Функції mysql_* використовують процедурний стиль, який менш гнучкий і складніший у підтримці, порівняно з об'єктно-орієнтованими інтерфейсами, які надають PDO та MySQLi.

6. Доступні кращі альтернативи

  • PHP зараз має два сучасних розширення для роботи з базами даних MySQL:
    • PDO (PHP Data Objects): Абстрактний шар для роботи з базами даних, який працює з багатьма системами баз даних (наприклад, MySQL, PostgreSQL, SQLite).
    • MySQLi (MySQL Improved): Розширення для MySQL, яке підтримує як процедурний, так і об'єктно-орієнтований підходи.

Приклад використання PDO.

prepare("SELECT * FROM users WHERE username = :username");  
$stmt->execute(['username' => $userInput]);  
$result = $stmt->fetchAll();  
?>

Приклад використання MySQLi.

prepare("SELECT * FROM users WHERE username = ?");  
$stmt->bind_param("s", $userInput);  
$stmt->execute();  
$result = $stmt->get_result();  
?>

7. Проблеми сумісності

  • Код, написаний з використанням функцій mysql_*, несумісний із сучасними версіями PHP, що призводить до помилок або збоїв у роботі додатків.
  • Перехід на PDO або MySQLi забезпечує довгострокову сумісність і зручність підтримки.

Swaraa Tech Solutions пропонує першокласні послуги веб-дизайну і розробки веб-сайтів у Ахмедабаді. Наша компанія з розробки додатків відома інноваційними рішеннями. Ми також спеціалізуємося на SEO-послугах в Ахмедабаді і маркетингу в соціальних мережах для покращення вашої онлайн-присутності. Скористайтеся нашими найкращими рішеннями для AWS Cloud.
Зв'яжіться з нами сьогодні для безкоштовної консультації!

Слідкуйте за оновленнями!
Відвідайте наш сайт: www.swaraa.dev
Напишіть нам: [email protected]
Зателефонуйте нам: 07935336883

Перекладено з: Why shouldn’t I use mysql_* functions in PHP?

Leave a Reply

Your email address will not be published. Required fields are marked *