Перехватите ошибку базы данных mysql и используйте ее в php - PullRequest
0 голосов
/ 12 июля 2011

Я создал следующую таблицу для пользовательских подписок.

CREATE TABLE IF NOT EXISTS `subscriptions` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `subscribed_to` int(11) NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_subscription` (`user_id`,`subscribed_to`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=76 ;

Я запрещаю идентичные строки, делая столбцы user_id и subscribed_to уникальными.Если пользователь пытается повторно отправить те же данные, которые я получаю:

Произошла ошибка базы данных Номер ошибки: 1062

Повторяющаяся запись '62 -88 'для ключа' unique_subscription '

INSERT INTO подписки (user_id, subscribed_to, date) VALUES ('62', '88', '2011-07-11 19:15:13')

Номер строки: 330

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

$query = "SELECT COUNT(*) FROM subscriptions WHERE (user_id = '62' AND subscribed_to = '88')";

if ($query > 0)
{
    //display already subscribed message
}
else
{
    //insert new row
}

База данных уже проверяет таблицу и возвращает ошибку.Вышеприведенный запрос select count(*) кажется излишним.Мне действительно нужно еще раз проверить таблицу в моем приложении?Есть ли способ зафиксировать ошибку базы данных, если она возникает, и сделать что-то с этим в моем приложении?

Если у вас есть идея, как, пожалуйста, поделитесь примером.Понятия не имею, как это делается ..!

1 Ответ

1 голос
/ 12 июля 2011

Проверить функцию PHP mysql_error

Вы можете заключить вызов db в оператор try catch для функций, которые выдают исключения, чтобы предотвратить сбой вашего приложения.

PHP-функция mysql_query не выдает исключение при ошибке, но возвращает FALSE. Вы можете проверить возвращаемое значение и выполнить mysql_error, чтобы выяснить проблему или зарегистрировать ее.

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