2011-07-12 7 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_idとユニークsubscribed_toを行うことによって、同一の行を禁止しています。ユーザーが同じデータを再送信しようとすると私が取得:1062

重複エントリ'62 -88' unique_subscription 'サブスクリプションINTO

INSERTキーのための'(:

データベースエラーはエラー番号を発生しましたuser_idは、subscribed_to、日付)VALUES( '62'、 '88'、 '2011年7月11日午後07時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ステートメント内デシベルの呼び出しをラップすることができます。

PHP関数mysql_queryはエラー時に例外をスローしませんが、FALSEを返します。戻り値を確認し、mysql_errorを実行して問題を見つけ出すか、ログに記録することができます。

+0

答えをありがとう!あなたは例を挙げていただけますか?私はこれがどのように行われているのかわかりません – CyberJunkie

+0

PHP関数はクエリを実行するために使用していますか?それは 'mysql_query'ですか? –

+0

私はmysql_queryを使用すると信じているcodeigniterフレームワーク経由でactiverecordを使用しています – CyberJunkie

関連する問題