【问题标题】:Capture mysql database error and use it in php捕获mysql数据库错误并在php中使用
【发布时间】: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_idsubscribed_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


    【解决方案1】:

    查看PHP函数mysql_error

    您可以将 db 调用包装在 try catch 语句中,用于抛出异常以防止应用程序崩溃的函数。

    PHP 函数mysql_query 出错时不会抛出异常,而是返回FALSE。可以查看返回值并执行mysql_error查找故障或记录。

    【讨论】:

    • 感谢您的回答!你能举个例子吗?我不确定这是怎么做到的
    • 您使用哪个 PHP 函数来运行查询?是mysql_query吗?
    • 我通过我相信使用mysql_query的codeigniter框架使用activerecord
    • $this->db->_error_message(); 将使用 codeigniter 为您提供错误消息。查看this forum thread 了解更多信息。
    猜你喜欢
    • 2011-09-01
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多