[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как перехватить ошибку от MySql
Страницы: 1, 2
BlackGhost
Например простой INSERT запрос пытается добавить в базу запись, одно из значений поля которой уже есть в базе и оно уникально. MySql, естественно, не добавит её, но выведет на экран ошибку Duplicate entry 'Философия' for key 'predmet_name

А как можно средствами PHP обработать эту ошибку, чтобы она не выводилась на экран, а чтобы вывелось сообщение, например echo 'Такое поле уже существует. Запись не добавлена'.


Спасибо.
Winston
Для начала можно сделать запрос на выбору вставляемого значения, а потом проверить если mysql_num_rows() > 0 значит запись существует.
Valick
Winston, тут чуть не об этом речь.
BlackGhost, ошибку надо подавлять @mysql_query и использовать конструкцию or die() и функцию mysql_error()



_____________
Стимулятор ~yoomoney - 41001303250491
Winston
Цитата (Valick @ 5.12.2012 - 19:00)
Winston, тут чуть не об этом речь

Цитата (Valick @ 5.12.2012 - 19:00)
BlackGhost, ошибку надо подавлять @mysql_query и использовать конструкцию or die() и функцию mysql_error()

Зачем подавлять, если можно избежать?

Не понял почему тебя мой способ не устраивает, т.к. если сделать предварительную проверку вставляемой записи, и если окажется, что такая запись есть, то и ошибки никакой не будет, т.к. запроса на вставку не будет.
inpost
Проверку надо делать запросом, верно Винстон говорит.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Valick
Ну ребята, вы в интернете не одни wink.gif между проверкой на существование и вставкой может успеть вклиниться другой процесс от другого пользователя и вы получите ошибку.
Я не говорю что проверку делать не надо, поэтому и сказал что тут чуть не об этом речь.
Не стоит проектировать логику приложения ориентированную на одного пользователя.

_____________
Стимулятор ~yoomoney - 41001303250491
inpost
Valick
И ты хоть раз такое встречал? Какова вероятность, что будет 2 абсолютно одинаковых логина с интервалом в 0.001 секунду? Это из разряда сказок.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
inpost
Ах да, ещё важный момент, надеюсь ты его прочитаешь...
В 3-м классе четко говорят, что делить на 0 нельзя. Но в вышке тебе иначе дают определение.
Или проведём аналогию с английским. В начале разбираются 3 времени, далее 12, далее общественные сокращения и упрощения речи. Никто в первом классе не скажет тебе: "u2", и переводится как "желаю тебе того же", тебе парят мозги на правильность речи, а о таком выражении ты никогда не будешь знать, пока не столкнёшься с высшим уровнем языка - общением.

Что я имею ввиду... для ТС наилучший вариант не думать и не фантазировать о проблемах гугла, когда происходят миллиард одновременных запросов, а как сделать нормальный простой и удобный сайт для 100-200 посетителей. Надо не забивать голову бесполезными знаниями, которые никогда в жизни могут даже не пригодиться, а уделить более необходимым вещам.

Отсюда для ТС наше решение более предпочтительно, чем твоё. Это ИХМО!

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Valick
inpost, вы о законе подлости слышали? Для этого закона не нужно миллиард или даже 100-200 пользователей, достаточно двух....
Зачем сидеть и ждать эту вероятность, если её можно полностью исключить?
Наверно и вы и Винстон очень давно не работали с файлами. Как думаете зачем там блокировки, да еще и разных мастей? Более того в MySQL тоже есть блокировки, применяются они крайне редко, так как в большинстве ситуаций разработчики СУРБД позаботились об этом на уровне ядра.
Можете конечно заморочатся и блокировать таблицу чтобы сделать подобие транзакции, но оно вам надо? smile.gif

_____________
Стимулятор ~yoomoney - 41001303250491
inpost
Valick
Конечно, когда необходима целостность данных абсолютно всех, тогда будем работать с блокировкой таблиц. Пока если в год один человек быстрее зарегистрируется, чем второй, и выйдет ошибка mysql, то достаточно вывести ошибку и попросить заново ввести регистрацию. А чтобы всё прошло гладко, через try-catch, и выводить, что: "ошибка регистрации, повторите ещё раз".

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Valick
inpost, прочитайте еще раз пост ТС. Речь о том как не получить ошибку инсерта в браузер, чтобы не испортить "лицо" странички. И вывести эту обработанную ошибку в нужном месте. И еще раз говорю, проверку перед вставкой нужно делать обязательно, особенно при большом количестве вставляемых данных, чтобы исключить ненужные инсерты при сборке запроса и снизить нагрузку на БД.
___
Из поста ТС неизвестно регистрация это или нет, и о нагрузке ничего не известно.

_____________
Стимулятор ~yoomoney - 41001303250491
inpost
Valick
"Из поста ТС неизвестно регистрация это или нет, и о нагрузке ничего не известно. "
Это всё потому, что ты не живёшь на форуме и мало следишь за людьми smile.gif

Ладно, пусть ТС сам выбирает для себя путь.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Valick
ТС то может и выберет, но не забывайте о тех кто пользуется поиском.
Название темы: Как перехватить ошибку от MySql, ошибка добавления дубликата.
И естественно человек будет обращать внимание на статус кто тут эксперт, а кто новичек, это один из минусов системы ранжирования, когда сам ответ отходит на второй план.

_____________
Стимулятор ~yoomoney - 41001303250491
inpost
Valick
Твоя проблема, что ты самоуверенный и тебе кажется, что ты прав, а эксперты тут такие все глупые... плохие советы дают... ну-ну.
Ты не прав, но я не хочу влезать в бесконечный спор с тобой, вот и всё.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Invis1ble
Цитата
Речь о том как не получить ошибку инсерта в браузер, чтобы не испортить "лицо" странички.

чтобы не испортить лицо странички, достаточно не выводить ошибки кода, а логировать их. А юзверю показать красивенькую надпись о том, что "что-то пошло не так".
Интересно, как бы попадали задавленные собаками ошибки в лог для последующего анализа разработчиком.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.