我正在DB中實現訂閱。電子郵件必須是唯一的,所以我在數據庫中有一個UNIQUE索引。我有這樣的代碼在我的頁面初始化:在db中處理重複錯誤的正確方法是什麼
$f = $p->add('MVCForm');
$f->setModel('Account',array('name','surname','email'));
$f->elements['Save']->setLabel('Subscribe');
if($f->isSubmitted())
{
try
{
$f->update();
//More useful code to execute when all is ok :)
}
catch(Exception_ValidityCheck $v)
{
//Handles validity constraint from the model
$f->getElement($v->getField())->displayFieldError($v->getMessage());
}
catch(SQLException $se)
{
//If I'm here there is a problem with the db/query or a duplicate email
}
}
在SQLException
的唯一信息是格式化的HTML郵件,這是檢測的誤差是重複的條目的唯一途徑?
請看http://fossies.org/unix/www/atk4-4.1.zip:a/atk4/lib/SQLException.php。恕我直言,我認爲你可以一般處理它們。報告錯誤已經足夠了。或者,您可以先檢查用戶電子郵件是否存在。 – Tommy
在詢問這裏之前,我查看了源代碼......在重複的情況下是不夠的,我需要在另一個頁面上重定向用戶。也許SQLException可以正確設置錯誤代碼以反映數據庫錯誤或將其映射爲更多數據庫不可知的方式? –
@TheElter偉大的問題。 – romaninsh