【发布时间】:2011-07-12 17:25:49
【问题描述】:
我为用户订阅创建了下表。
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
密钥“unique_subscription”的重复条目“62-88”
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(*) 查询似乎是多余的。我真的需要在我的应用程序中再次检查表格吗?有没有办法在数据库错误发生时捕获它,并在我的应用程序中对此进行处理?
如果您有一个想法,请分享一个示例。我不知道这是怎么做到的..!
【问题讨论】:
标签: php mysql database database-design