Ошибки php разработчиков при работе с MySQL

База данных — основа для большинства веб приложений. PHP относительно прост и позволяет писать код достаточно быстро. Однако построение баз данных требует навыков и времени. В статье поговорим о самых частых ошибках при работе с MySQL.

Использование MyISAM чаще, чем InnoDB

MySQL поддерживает множество различных движков баз данных, самые популярные среди которых MyISAM и InnoDB.

MyISAM используется по умолчанию. Пока вы создаете простые базы данных, проблем не возникает. Но MyISAM не поддерживает внешние ключи и транзакции, поэтому его использование сомнительно для серьезных проектов. Ко всему прочему, таблицы блокируются при вставке данных или обновлении; это сказывается на производительности.

Решение простое — использовать InnoDB.

Использование в php mysql_* функций

PHP предалагет множество функций для работы с MySQL. Часто в приложениях встречаются mysql_connect, mysql_query, mysql_fetch_assoc и прочие. Однако, если вы пользуетесь MySQL версии 4.1.3 и старше, рекомендуется пользоваться расширением mysqli, имеющим несколько преимуществ:

  • объектно-ориентированность
  • подготовленны запросы, которые уменьшают вероятность инъекций и увеличивают скорость работы
  • поддержка транзакций

В качестве альтернативы, Вы можете использовать PDO.

Отсутствие обработки пользовательского ввода

Это проблема номер один. Никогда нельзя доверять данным, пришедшим от пользователя. Првоеряйте каждую строку, пришедшую на сервер. Простейшей SQL инъекции подвержен следующий код:

  1. $username = $_POST["name"];
  2. $password = $_POST["password"];
  3. $sql = "SELECT userid FROM usertable WHERE username='$username' AND password='$password';";

Достаточно ввести “admin'; —” в поле имя пользователя. Злоумышленник узнает пароль.

Предпочтение функциям PHP перед нативными SQL

Новички в MySQL зачастую не пользуются встроенными в SQL функциями, а вместо этого выполняют действия в языках, на которых обрабатывают полученные данные. Это неправильно. Например, использование встроенной функции AVG для подсчета среднго значения по столбцу будет работать быстрее, чем если выполнять пересчет на том же PHP.

Неоптимизированные запросы

99% проблем в производительности PHP скриптов возникают из-за базы данных. Один тяжелый запрос способен сыграть большую отрицательную роль на производительности всего приложения и сервера вцелом. Для отладки запросов следует использовать EXPLAIN, профилирование, а также различные утилиты, предназначенные для отладки SQL запросов.

Использование неправильных типов данных

MySQL предлагает большое количество числовых, строковых и временных типов данных. Храните дату используя тип DATE или DATETIME.

Использование * в SELECT запросах

Никогда не используйте звездочку (*) для выборки всех столбцов в таблице. Извлекайте только те данные, которые вам реально нужны. Даже если вам нужны все поля в таблице, не поленитесь их перечислить.

Недостаток и переизбыток индексов

Поля, часто используемые в запросах после WHERE, должны быть индексами. Не стоит добавлять индексы к каждому полю таблицы. Индексы обновляются при каждом INSERT или UPDATE, что может сильно тормозить сервер.

Отсутствие бекапов

Базы данных могут рушиться, а вместе и с ними все ваши ценные данные. Может выйти из строя жесткий диск или загореться сервер (и такое бывает…), хостинг провайдер может закрыться, оборудование может быть арестовано полицией. Потеря данных может стать катастрофой. Поэтому не стоит забывать об автоматических, в меру частых бекапах базы данных.

Запись опубликована в рубрике PHP & MySQL с метками , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">