5

我先解释一下表结构:

+-----------+--------------+------+-----+---------+----------------+
| 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));
}

当从另一个表中引用此用户时,它应该会引发错误。“坏”的事情是,Codeigniter 实际上在整页上显示了该错误:

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 而不是显示错误?我想通知用户他们必须先做其他事情。我尝试使用事务并返回事务状态,但这仍然会引发错误。

4

2 回答 2

9

在配置文件夹 database.php 文件中找到该行

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

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

同样在删除功能中,您可以检查:

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

如果发生这种情况时您需要做一些特别的事情。

于 2012-05-06T09:17:48.103 回答
0

我以这种方式使用它 Codeigniter 3.0

模型

/*
 * function to delete user
 */
function delete_user($id)
{
            if ( ! $this->db->delete('users', array('id' => $id)))
            {
                            return $this->db->error();
            }
    return FALSE;
}

控制器

$fk_check = $this->User_model->delete_user($id);

if($fk_check) {
// Unable to delete record
// $fk_check is an array containing $fk_check['code'] & $fk_check['message']
exit();
}

// Here your record has been deleted
于 2019-09-07T13:51:17.960 回答