Почему не стоит использовать функции mysql_* в PHP?
Проблема с использованием функций mysql_* в PHP
Я столкнулся с некоторыми проблемами при использовании функций mysql_* в PHP, таких как mysql_query(), mysql_connect() и mysql_real_escape_string(). Хотел бы понять технические причины, по которым не стоит использовать эти функции.
Почему рекомендуется использовать альтернативы, если функции
mysql_*работают на моём сайте? Я хочу понять, какие недостатки есть у этих функций, которые могут повлиять на безопасность и производительность.Если у меня возникают ошибки, такие как:
Warning: mysql_connect(): No such file or directoryКаковы возможные причины этих ошибок? Что они означают и как их можно исправить?
Буду признателен за подробные объяснения и рекомендации по использованию более современных и безопасных альтернатив для работы с базами данных в PHP.
3 ответ(ов)
Функции mysql_:
- устарели — они больше не поддерживаются;
- не позволяют легко перейти на другой движок базы данных;
- не поддерживают подготовленные выражения, что, в свою очередь;
- побуждают программистов использовать конкатенацию для создания запросов, что может привести к уязвимостям, связанным с SQL-инъекциями.
Существует множество причин, но, возможно, самая важная заключается в том, что функции mysql_* способствуют небезопасным практикам программирования, поскольку не поддерживают подготовленные выражения. Подготовленные выражения помогают предотвратить атаки SQL-инъекцией.
При использовании функций mysql_* вам необходимо помнить о том, чтобы пропускать параметры, предоставленные пользователем, через mysql_real_escape_string(). Если вы забудете сделать это хотя бы в одном месте или случайно экранируете только часть ввода, ваша база данных может оказаться под угрозой.
Использование подготовленных выражений в PDO или mysqli значительно усложнит возможность допустить подобные ошибки программирования.
Нет необходимости обновлять, если вы уверены, что не хотите менять версию PHP. Однако в этом случае вы также не получите обновления безопасности, что сделает ваш сайт более уязвимым для хакеров. Это основная причина.
Можно ли привязать массив к условию IN() в запросе PDO?
Достаточны ли подготовленные выражения PDO для предотвращения SQL-инъекций?
Какой лучший порядок сортировки использовать для MySQL с PHP? [закрыто]
Ошибка при отправке пакета QUERY
Какой быстрее в PHP - MySQL или MySQLi?