Проверка, если URL уже представлен в базе данных в php - PullRequest
0 голосов
/ 25 февраля 2010

Что мне нужно сделать, это проверить, если URL уже передан в базу данных, используя php.

У меня есть таблица базы данных, в которой я храню URL-адреса, отправленные пользователями. Но я хочу проверить, если URL-адреса уже отправлены или нет в базе данных, прежде чем вставить его в базу данных. Например, URL-адреса, такие как http://www.example.com, http://www.example.com/, http://example.com и http://example.com/, должны возвращать значение false, если какой-либо из них уже вставлен в базу данных, поскольку все они являются одинаковыми URL. Я думаю, что мы можем сделать это с помощью регулярных выражений. Но я немного слаб в регулярных выражениях, поэтому нужна ваша помощь. спасибо

Отредактировано

Здравствуйте, давайте предположим, что URL-адреса находятся в массиве, а не в базе данных, чтобы прояснить ситуацию. Я знаю об уникальном ключе и совпадении URL с результатом из базы данных. Но здесь у меня есть

другой вопрос, если вы внимательно посмотрите на него.

$ urls = array ('http://www.example.com/newpage.html',' http://www.example.com/newpage.html');

случай Пользователь отправляет URL. предположим http://example.com/newpage.html

Теперь в качестве URL-адреса http://www.example.com/newpage.html доступен в массиве $ urls, а http://www.example.com/newpage.html и http://example.com/newpage.html(userinput без www) - это одна и та же страница, поэтому мне нужна функция, чтобы проверить ее и вернуть false если URL доступен в массиве. Я надеюсь, что я прояснил себя.

Так что я думаю, что это не проверка домена или создание уникального ключа в таблице mysql для поля url. Я думаю, что мы должны использовать regExp для этого. Любая помощь?

Ответы [ 4 ]

0 голосов
/ 25 февраля 2010

Может быть, если сделать поле "уникальным", это поможет mysql проверить значение. Если вы получите код возврата 1062, то вы будете знать, что он уже есть в базе данных.

Конечно, не очень хорошая идея, если у вас слишком много учетных записей. И вы должны проверить URL с php, чтобы вы всегда вставляли их одинаково. (например, добавление или удаление 'http://' или www)

0 голосов
/ 25 февраля 2010

Как говорит Бен Джеймс, www.example.com и example.com - это не одно и то же.Также ваше значение URL немного расплывчато.

Но если вы хотите проверить, существует ли example.com уже.Просто сделайте подсчет в вашей базе данных с помощью опции вроде:

select count(*) from table where url like '%.example.com%'

Где example.com извлекается из полного URL.Если число> 0, домен уже находится в базе данных.Вам придется настроить это решение, но я должен использовать что-то вроде этого.

0 голосов
/ 25 февраля 2010

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

Однако вы можете просто создать столбец, в котором хранятся URL-адреса UNIQUE и использовать INSERT IGNORE .

Из руководства MySql

Если вы используете ключевое слово IGNORE, ошибки, возникающие при выполнении оператора INSERT, вместо этого рассматриваются как предупреждения. Например, без IGNORE строка, которая дублирует существующий индекс UNIQUE или значение PRIMARY KEY в таблице, вызывает ошибку дубликата ключа, и оператор прерывается. С IGNORE строка все еще не вставлена, но ошибка не выдана.

Это все равно вставит example.com и www.example.com , хотя это действительно разные строки. Вы можете использовать parse_url, чтобы проверить и подготовить их перед вставкой.

Связанный:

0 голосов
/ 25 февраля 2010

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

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