2009-04-20 6 views
1

테이블이 있는데 URL이있는 텍스트 필드가 다시 생깁니다. 중복 된 URL이있는 행이 필요하지 않지만 삽입하기 전에 확인하지 않으려 고합니다. 텍스트 필드를 만들 수있는 방법이 없습니다. 고유하거나 사용할 다른 필드 유형을 제안 할 수 있습니까?PHP 고유 텍스트 필드?

답변

6

데이터베이스의 텍스트 필드가 고유 또는 기본 키로 설정되었거나 설정했으면 복제를 입력 할 때 삽입 문이 실패합니다. 그렇게하면 실패한 인서트를 제대로 처리 할 수 ​​있습니다.

다른 곳에서 지적했듯이 실제 TEXT 필드는 고유 할 수 없지만 varchar 필드를 사용하는 경우 수행 할 수 있습니다. URL의 텍스트 필드를 TEXT 필드에 저장하는 경우 걱정할 다른 문제가 있기 때문에 이것은 전혀 중요하지 않을 수 있습니다 (단지 잘못된 의사 소통 일 수 있음).

+0

고유 키를 추가하는 데 필요한 필드에 최대 길이를 추가 할 수 없습니다. – zuk1

+1

필드를 텍스트에서 varchar로 변경하고 적절한 길이를 지정하십시오. – TheTXI

+0

좋습니다.하지만 250 자 이상의 URL을 삽입하려고 시도했지만 걱정할 필요는 없습니다. 텍스트 필드에 URL을 저장하는 것과 관련하여 언급 한 다른 문제는 Wht입니까? – zuk1

1

URL 필드의 해시가 포함 된 다른 필드를 사용해 볼 수 있습니다.

0

올바른 방법은 URL에 테이블이 있는지 여부를 확인하고, 그렇다면 삽입하고, 그렇지 않으면 삽입하지 않습니다.

예외 처리는 실제로 필요한 곳에서 사용해야하며 정상적인 기능을 대체하는 데 사용해서는 안됩니다.

7

기본적으로 솔루션은 field_hash와 같은 데이터베이스에 추가 필드를 추가하여 VARCHAR로 만들고 인덱스를 고유하게 만듭니다.

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')");