2011-07-12 57 views
0

我爲用戶訂閱創建了下表。捕獲mysql數據庫錯誤,並在php中使用它

CREATE TABLE IF NOT EXISTS `subscriptions` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `user_id` int(11) NOT NULL, 
    `subscribed_to` int(11) NOT NULL, 
    `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `unique_subscription` (`user_id`,`subscribed_to`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=76 ; 

我通過使列user_idsubscribed_to獨特不允許相同的行。如果用戶試圖重新提交相同的數據,我得到:

數據庫出錯錯誤編號:1062

重複條目'62 -88' 關鍵 'unique_subscription'

INSERT INTO訂閱( USER_ID,subscribed_to,日期)VALUES( '62', '88', '2011-07-11 19點15分13秒')

行號:330

我通過在嘗試插入數據之前檢查是否存在相同的行來防止數據庫錯誤。

$query = "SELECT COUNT(*) FROM subscriptions WHERE (user_id = '62' AND subscribed_to = '88')"; 

if ($query > 0) 
{ 
    //display already subscribed message 
} 
else 
{ 
    //insert new row 
} 

數據庫已經檢查了表並返回一個錯誤。上面的select count(*)查詢似乎是多餘的。我真的需要在我的應用程序中再次檢查表嗎?有沒有辦法在發生數據庫錯誤時捕獲數據庫錯誤,並在我的應用程序中執行某些操作?

如果你有一個想法,請分享一個例子。我不知道這是如何完成的!!

回答

1

退房PHP函數mysql_error

你可以用該拋出異常的作用是防止崩潰您的應用程序try catch語句中的DB調用。

PHP函數mysql_query不會拋出異常,但會返回FALSE。您可以檢查返回值並執行mysql_error以查明故障或記錄它。

+0

感謝您的回答!你能舉個例子嗎?我不確定這是如何完成的 – CyberJunkie

+0

您使用哪個PHP函數運行查詢?它是'mysql_query'嗎? –

+0

我通過codeigniter框架使用activerecord,我相信使用mysql_query – CyberJunkie