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 を返すようにする方法はありますか? 最初に何か他のことをしなければならないことをユーザーに通知したいと思います。トランザクションを使用して transaction_status を返そうとしましたが、それでもエラーがスローされます。

4

2 に答える 2

9

構成フォルダーdatabase.phpファイルで行を見つけます

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

FALSEに設定します。これにより、Codeigniterが画面にエラーを出力するのを防ぎます。

また、削除機能で確認できます。

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

これが起こったときに何か特別なことをする必要がある場合。

于 2012-05-06T09:17:48.103 に答える