Drupal - Как определить тип ошибки mysql и распечатать пользовательское сообщение об ошибке - PullRequest
1 голос
/ 25 января 2011

Я разрабатываю модуль Drupal. Есть таблица под названием валюта. Столбец currency_code установлен на UNIQUE. Когда я пытаюсь ввести повторяющуюся запись, drupal автоматически показывает сообщение об ошибке, подобное этому: -

.-------------------------------------------------------------------------.
|  user warning: Duplicate entry 'USD' for key 'currency_code'            | 
|  query: INSERT INTO currency(currency_id, currency_name, currency_code) |
|  VALUES (NULL, 'US Dollar', 'USD') in /xxx/currency/currency.admin.inc  |
|  on line 106.                                                           |
.-------------------------------------------------------------------------.

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

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

Ответы [ 3 ]

4 голосов
/ 25 января 2011

Уровень абстракции базы данных в Drupal имеет функцию db_error , которая включает mysql_errno и возвращает MySQL error number последнего запроса.

2 голосов
/ 25 января 2011

Во-первых, вы должны интерпретировать ошибку через ее номер, а не путем анализа строки, которая может быть изменена.

Во-вторых, было бы лучше предвидеть эту проблему и лучше ее обрабатывать.Если проблема, например, игнорируется, возможно, INSERT.,,ON DUPLICATE UPDATE будет более уместным.Если это не игнорируется, возможно, правильным способом было бы проверить и отобразить соответствующее сообщение, а не полагаться на неудачный запрос.

1 голос
/ 25 января 2011

Вам следует использовать функцию devel dprint_r ($ array), а также другие функции, которые она предоставляет для отображения удобных сообщений об ошибках.

Если вы просто хотите скрыть это, установите Error_reporting в admin для LOG.

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