Ссылка: Каков идеальный пример кода с использованием расширения MySQL? [closed]

Это сделано для создания ресурса обучения сообщества . Цель состоит в том, чтобы иметь примеры хорошего кода, который не повторяет ужасных ошибок, которые так часто можно найти при копировании / вставке кода PHP. Я попросил сделать это вики Сообщества.

Это не означает соревнование по кодированию. Речь идет не о том, чтобы найти самый быстрый или самый компактный способ выполнения запроса, а о том, чтобы предоставить хороший, читаемый справочник, особенно для новичков.

Каждый день возникает огромное количество вопросов с действительно плохими фрагментами кода, использующими семейство функций mysql _ * в Stack Overflow. Хотя обычно лучше направить этих людей к PDO, иногда это невозможно (например, унаследованное устаревшее программное обеспечение) или реалистичное ожидание (пользователи уже используют его в своем проекте).

Общие проблемы с кодом, использующим Библиотека mysql _ * включает:

  • SQL-инъекцию в значениях
  • SQL-инъекцию в предложениях LIMIT и имена динамических таблиц
  • Нет отчетов об ошибках («Почему этот запрос не работает?»)
  • Неработающие отчеты об ошибках (то есть ошибки всегда возникают, даже когда код вводится в производство)
  • Внедрение межсайтового скриптинга (XSS) в вывод значения

Давайте напишем образец кода PHP, который выполняет следующие действия, используя mySQL_ * семейство функций :

  • Принять два значения POST, id (числовой) и имя (строка)
  • Выполните запрос UPDATE для таблицы имя_таблицы , изменив столбец имя в строке с идентификатором id
  • В случае сбоя завершите работу, но покажите подробная ошибка только в производственном режиме. trigger_error () будет достаточно; в качестве альтернативы используйте метод по вашему выбору
  • . Выведите сообщение « $ name обновлено.»

И не обнаруживает ли какие-либо из перечисленных выше недостатков.

Это должно быть быть максимально простым . В идеале он не содержит никаких функций или классов. Цель не в том, чтобы создать библиотеку для копирования / вставки, а в том, чтобы показать минимум того, что нужно сделать, чтобы сделать запросы к базе данных безопасными.

Бонусные баллы за хорошие комментарии.

Цель состоит в том, чтобы сделать это ставить под сомнение ресурс, на который пользователь может ссылаться, когда встречает человека, задающего вопрос, у которого плохой код (даже если он вообще не является предметом вопроса) или сталкивается с ошибочным запросом и не знает, как его исправить.

Чтобы упредить обсуждение PDO:

Да, часто будет предпочтительнее направить людей, пишущих эти вопросы, в PDO. Когда это возможно, мы должны это сделать. Однако это не всегда возможно - иногда задающий вопрос работает с устаревшим кодом или уже прошел долгий путь с этой библиотекой и вряд ли изменит ее сейчас. Кроме того, семейство функций mysql _ * совершенно безопасно при правильном использовании. Поэтому, пожалуйста, не используйте здесь PDO.

60
задан 14 revs, 4 users 92% 27 March 2012 в 10:23
поделиться