Функції 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?