2009-04-20 4 views
1

У меня есть таблица, и у меня есть текстовое поле с URL-адресом, я не хочу никаких строк с повторяющимися URL-адресами, но я бы предпочел не делать проверку перед вставкой, нет ли способа сделать текстовое поле уникальный или вы можете предложить другой тип поля для использования?PHP уникальное текстовое поле?

ответ

6

Если ваше текстовое поле в базе данных установлено на уникальный или первичный ключ или, тем не менее, вы настроили его, то при попытке ввода дубликата не будет выполняться инструкция insert. Таким образом, все, что вам нужно сделать, это правильно обработать неудачную вставку и там у вас есть.

Как указано в другом месте, вы не можете иметь фактическое поле ТЕКСТ, но если вы используете поле varchar, оно выполнимо. Это может быть неважно вообще (может быть, это просто недопонимание), потому что, если вы сохраняете URL-адрес в поле TEXT, вам также нужно беспокоиться о других проблемах.

+0

Возможно, я не могу добавить максимальную длину в поле, которое требуется для добавления уникального ключа, любых идей? – zuk1

+1

Измените свое поле из текста на varchar и дайте ему соответствующую длину. – TheTXI

+0

Хорошо, но я был просто взволнован. Я попытался бы вставить URL более 250 в длину, но это маловероятно. Какие еще проблемы вы упомянули, которые поступают из хранения URL-адресов в текстовых полях? – zuk1

1

Вы можете попробовать использовать другое поле, содержащее хэш поля URL.

0

Правильный способ заключается в том, чтобы проверить, существует ли в таблице url, если да, то вставить, иначе, donot insert.

Как наилучшая практика, использование исключений должно использоваться там, где оно действительно требуется, оно не должно использоваться в качестве замены обычных функций.

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')"); 
Смежные вопросы