Должно ли приложение PHP выполнять обработку ошибок в неверных значениях базы данных? - PullRequest
3 голосов
/ 19 марта 2009

Представьте себе это ... У меня есть поле в базе данных с именем 'current_round'. Это может быть только в диапазоне 0,1,2,3.

С помощью логики приложения невозможно получить в базу данных число больше 3 или меньше 0.

Должна ли выполняться проверка на наличие ошибок, чтобы определить, не искажено ли значение (т. Е. Не в диапазоне 0-3)? Или это просто ненужные накладные расходы? Можно ли предположить, что значения в базе данных правильно отформатированы / ранжированы и т. Д. (При условии, что вы корректируете / корректируете все пользовательские данные?)

Ответы [ 5 ]

3 голосов
/ 19 марта 2009

Я обычно не проверяю все данные из базы данных. Вместо этого я пытаюсь наложить ограничения на базу данных. В вашем случае, в зависимости от значения 0, 1, 2, 3, я мог бы использовать таблицу поиска с ограничением внешнего ключа или, если это просто числовые значения, я мог бы использовать ограничение проверки (отличается от поставщика БД следующим).

Это помогает защитить от изменений, внесенных в БД кем-либо с прямым доступом и / или будущими приложениями, которые могут использовать ту же БД, но не разделяют ваш процесс проверки ввода.

2 голосов
/ 20 марта 2009

Получить базу данных, чтобы сделать это для вас. Самые продвинутые СУБД (ознакомьтесь с бесплатной версией DB2 Express-C по адресу http://FreeDB2.com), которая позволяет вам определять ограничения. Таким образом, вы получаете базу данных для обеспечения семантической целостности ваших данных. Выполнение этого в коде приложения будет работать с самого начала но вы неизменно обнаружите, что он перестанет работать по разным причинам. У вас могут быть дополнительные приложения, заполняющие данные в базу данных, или вы можете получить сообщение об ошибке в существующем приложении. Чаще всего случается, что вы получаете новый люди будут работать над приложением, и они добавят код, который не сможет выполнить тот же уровень проверки, что и вы.

2 голосов
/ 19 марта 2009

Везде, где вы решите поместить проверку перед вставкой в ​​базу данных, вы должны ловить эти вещи.

Процесс проверки должен проходить в одном месте и только в одном месте. В зависимости от структуры вашего приложения:

  • Это процедурный или объектно-ориентированный?
  • Если объектно-ориентированный, то используете ли вы шаблон Active Record, Gateway или Data Mapper для обработки сопоставления вашей базы данных?
  • Есть ли у вас доменные объекты, которые отделены от уровня абстракции базы данных?

Тогда вам нужно будет решить, где разместить эту логику в вашем приложении.

В моем случае, доменные объекты содержат логику проверки и функции с сопоставителями данных, которые фактически выполняют функции вставки и обновления базы данных. Поэтому, прежде чем я попытаюсь сохранить информацию в базе данных, я подтверждаю, что есть допустимые значения.

0 голосов
/ 21 марта 2009

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

0 голосов
/ 19 марта 2009

В общем, вы должны проверить, что вы ожидаете, либо значение, либо тип. И действовать соответствующим образом. Только после он не проходит все проверки, может быть, какой-то код подумает о том, как решить, что делать с «неправильным» значением и как исправить ситуацию. Это относится к значению состояния, например к тому, что у вас есть, или к типу ввода, который должен быть правильного типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...