2014-10-10 91 views
0

我正在使用codeigniter和postgresql創建一個Web應用程序。我有這個在我的數據庫內:Codeigniter:如何處理數據庫錯誤?

user 
id name 
unique(name) 

當有人試圖用相同的名稱註冊時,我得到一個錯誤。我如何處理它們,而不顯示codeigniter的錯誤並顯示我的自定義錯誤? 如果我設置$db['default']['db_debug'] = FALSE;我當然沒有得到任何錯誤,但有沒有辦法處理數據庫錯誤,或者我應該檢查自己,如果表中已經包含一個同名的條目?

回答

0

我不知道用什麼笨,但即時通訊將承擔的工作原理相同:

你先進行查詢像SELECT id FROM tablename WHERE name='SomeName' LIMIT 1,那麼你檢查的行數。這種檢查是相當正常的。像你一樣控制(有條理)可以避免路上的錯誤。

零行?安全插入。不是零行?顯示「使用者名稱已被使用」之類的內容。

實施例與一些代碼:

$check = mysqli_query("SELECT id FROM tablename WHERE name='SomeName' LIMIT 1"); 
if($check->num_rows!==0){ 
    echo 'Username allready taken'; // echo is bad, you should process this better, but this is easy demo 
} 
else{ 
    // Your normal inserting code goes here. 
} 
+0

感謝您的回答的Martijn的is_unique驗證的例子,但我是問,如果有另一種方式來做到這一點或許真的建在內部codeigniter! – 2014-10-10 09:51:50

1

使用Codeigniters表單驗證類。 is_unique [table.columnName]。這將爲你做這項工作。下面是

$this->form_validation->set_rules('name', 'Name', 'is_unique[table_name.Name]'); 

然後,只需設置一個自定義消息引用類似下面

$this->form_validation->set_message('is_unique', 'Name already exists');