Почему не стоит использовать функции 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. Однако в этом случае вы также не получите обновления безопасности, что сделает ваш сайт более уязвимым для хакеров. Это основная причина.
Как предотвратить SQL-инъекции в PHP?
UTF-8 на всех уровнях!
Ошибка: mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows и др. ожидают ресурс в качестве параметра 1
Функции startsWith() и endsWith() в PHP
Как получить расширение файла в PHP?