PHP уникальное текстовое поле? - PullRequest
1 голос
/ 20 апреля 2009

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

Ответы [ 4 ]

7 голосов
/ 08 октября 2011

Решение в основном состоит в том, чтобы добавить дополнительное поле в базу данных, например 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')");
6 голосов
/ 20 апреля 2009

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

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

1 голос
/ 20 апреля 2009

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

0 голосов
/ 21 апреля 2009

Правильный способ - проверить, существует ли URL в таблице, если да, то вставить, иначе donot insert.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...