PHP / MYSQL - Как обрабатываются ограничения уровня базы данных в приложении - PullRequest
3 голосов
/ 05 февраля 2011

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

В других языках / оболочках базы данных (например, ADO.NET) вы взаимодействуете с базой данных внутри try / catch, и она выдает правильное исключение, так ли это в случае с php?

Кроме того, сводит ли использование строгого ORM к необходимости ограничения уровня базы данных?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2011

Великий миф о блоках try / catch заключается в том, что программист собирается создать удивительно надежный код и фактически сможет восстановиться после неудачного запроса к базе данных.Но возможность восстановления после ошибки базы данных зависит от того, какая именно ошибка возникла в первую очередь - если есть синтаксическая ошибка sql, то пришел ли этот код от пользователя, набирающего запрос, или от какой-либо подпрограммы, которая создаетзапрос?Если он исходил из кода, а не от пользователя, то повторный вызов кода просто выдаст ту же ошибку снова, поэтому использование блока try / catch просто обречено с самого начала, запрос не будет выполняться никогда.И это, как правило, тот тип кода, который вы получаете от PHP-скрипта, работающего на веб-сервере, вы запускаете запрос, он терпит неудачу, вы усиливаете ошибку и отказываетесь.Если, с другой стороны, вы писали интерактивное приложение на PHP и вам нужно было правильно обрабатывать ошибки БД, например, генетический алгоритм, который пытался развить допустимые операторы SQL посредством случайной мутации (очень странный пример, но в любом случае), то выполучит некоторую выгоду от блоков try / catch.

Это относится и к ограничениям на уровне базы данных.Если у вас есть какое-то долгое время работающее приложение, которое должно изящно справляться с нарушениями ограничений, то вам придется создать эту устойчивость самостоятельно.Но я полагаю, что очень немногие люди используют PHP таким образом, 99% php используется для выгрузки веб-страниц, и различные оболочки и ORM отражают это в своих проектах.Существует гораздо большая вероятность, что .NET будет использоваться для создания отдельного приложения, для которого требуется логика восстановления после ошибок.

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

0 голосов
/ 05 февраля 2011

В других языках / оболочках базы данных (например, ADO.NET) вы взаимодействуете с базой данных внутри try / catch, и она выдает правильное исключение, в случае php?

Это происходит с PDO ... и я думаю, что Mysqli, но я не использовал это через пару лет, поэтому я могу ошибаться.Однако он генерирует только исключение PDOException ... не существует определенных типов исключений, например, для «дублирующего ключа» или «не нулевого» ... их необходимо проанализировать из сообщения / кода исключения.

Кроме того, сводит ли использование строгого ORM к необходимости ограничения уровня базы данных?

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

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