Я создал следующую таблицу для пользовательских подписок.
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(*)
кажется излишним.Мне действительно нужно еще раз проверить таблицу в моем приложении?Есть ли способ зафиксировать ошибку базы данных, если она возникает, и сделать что-то с этим в моем приложении?
Если у вас есть идея, как, пожалуйста, поделитесь примером.Понятия не имею, как это делается ..!