2009-04-20 10 views
1

私はテーブルを持っているし、再度URLを持つテキストフィールドを持っている、私は重複したURLを持つ行が欲しくないが、挿入する前にチェックをしたくない、テキストフィールドを作る方法がない独自のフィールドタイプを使用することを提案できますか?PHP独自のテキストフィールド?

答えて

6

データベースのテキストフィールドが一意キーまたは主キーに設定されている場合、または設定している場合は、重複を入力しようとすると挿入ステートメントが失敗します。そうすれば、失敗したインサートを適切に処理して、それを持っていなければなりません。

他のところで指摘したように、実際のTEXTフィールドを一意にすることはできませんが、varcharフィールドを使用している場合は実行可能です。これは重要ではないかもしれません(誤った通信かもしれません).TextフィールドにURLを格納している場合は、他の問題もあります。

+0

私は一意のキー、任意のアイデアを追加するために必要なフィールドに最大の長さを追加できないようですか? – zuk1

+1

フィールドをテキストからvarcharに変更して、適切な長さを与えてください。 – TheTXI

+0

しかし、私はちょうど私が250を超える長さのURLを挿入しようとしていると心配していましたが、それは非常にありそうもありません。 あなたは、テキストフィールドにURLを格納することから来たあなたが言及した他の問題は何ですか? – zuk1

1

URLフィールドのハッシュを含む別のフィールドを使用できます。

0

正しい方法は、テーブルにURLが存在するかどうかを確認し、そうであれば挿入し、そうでない場合は挿入しません。

例外処理は、実際に必要な場所で使用することをお勧めします。通常の機能を置き換えるものとして使用しないでください。

7

解決策は、基本的にfield_hashのようなデータベースに余分なフィールドを追加し、それをVARCHARにしてIndexをユニークにします。

CREATE TABLE 'info' (
'text' text NOT NULL, 
'text_hash' varchar(40) NOT NULL, 
PRIMARY KEY ('id'), 
UNIQUE KEY 'text_hash' ('text_hash') 
); 

$text = 'Full Text'; 
$text_hash = sha1($text); 

mysql_query("INSERT INTO info (text, text_hash) VALUES ('$text', '$text_hash')"); 
関連する問題