2012-05-05 85 views
4

让我先解释一下表结构:笨外键约束检查

+-----------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-----------+--------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| firstname | varchar(255) | NO |  | NULL |    | 
| name  | varchar(255) | NO |  | NULL |    | 
+-----------+--------------+------+-----+---------+----------------+ 

id字段从另一个表通过外键引用。

说我有这样的在我的模型的函数:

public function delete_user($id) { 
    return $this->db->delete('users', array('id' => $id)); 
} 

当该用户从其他表引用,则应该抛出一个错误。 “坏”的事情是,笨实际显示完整页面上的错误:

Error Number: 1451 

Cannot delete or update a parent row: a foreign key constraint fails (`testing`.`users_link`, CONSTRAINT `users_link_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)) 

DELETE FROM `users` WHERE `id` = '1' 

有没有一种方法,使DELETE_USER函数返回FALSE,而不是显示错误?我想通知用户他们必须先做其他事情。我尝试使用事务并返回transaction_status,但仍然抛出错误。

在config.php文件
+0

你需要修改删除函数 – Satya

+0

自己找到答案:$ db ['default'] ['db_debug'] = FALSE;并且错误不再显示,所以我可以显示我的自定义错误信息:) – EsTeGe

回答

6

找到行

$db['default']['db_debug'] 

并将其设置为FALSE。这将防止Codeigniter在屏幕上打印错误。

另外,在删除功能,您可以检查:

if ($this->db->_error_number() == 1451) 

如果你需要做一些特别的东西,当这种情况发生。

+2

请注意,在Codeigniter 3.0(CI3)中,现在是'$ errors = $ this-> db-> error();' – CodeGodie

+0

如果你'如果使用默认环境,则重新查找'$ db ['default'] ['db_debug']'行,它位于'/ application/config/database.php'中。 –