检查MySQL数据库PHP中的现有URL

时间:2014-05-30 04:46:36

标签: php mysql laravel-4

我希望用户能够提交一个URL,该URL会根据数据库进行检查以查看是否已有条目。但是,我希望检查也忽略该域。

例如如果 www.example.com 存在,那么 www.example.net www.example.gov < / em>等也应该被拒绝。但是,此处的SQL检查将返回0记录,因为它们被认为是不同的。

有没有有效的方法呢?我能想到的唯一方法是划分给定的URL并获取主域并使用SQL&#39; Like&#39;来搜索该特定域。功能。但是,这会在处理像blogspot等网址时出现问题。

我很难过,任何建议都会很棒!

2 个答案:

答案 0 :(得分:1)

为什么不做这样的事情?

SELECT `name` FROM `domains` WHERE LEFT(`name`, LENGTH(`name`) - LOCATE('.', REVERSE(`name`))) = 'example';

然后,您只需要通过PHP删除搜索字词的TLD,或将'example'替换为LEFT('example.com', ...)。我可能会通过php做那部分。

如果您还要匹配任何子域,可以使用以下内容:

SELECT `name` FROM `domains` WHERE SUBSTRING_INDEX(LEFT(`name`, LENGTH(`name`) - LOCATE('.', REVERSE(`name`))), '.', -1) = 'example';

请注意,如果搜索此第二个查询,则会匹配example.com和dev.example.com,但不会匹配dev.dev.example.com。如果你想走得那么远,我认为你需要使用PHP。另外,如果使用第二个,你还需要预先通过php去掉子域(或做同样的事情(SUBSTRING_INDEX(LEFT('example.com', ...))

希望这有帮助!顺便说一句,如果您使用的是Laravel的查询构建器,则需要使用whereRaw才能执行此操作。

答案 1 :(得分:0)

我认为你应该使用php从数据库中获取所有现有条目,将它们存储在一个数组中,然后遍历该数组,检查新提交的域是否已作为每个条目的一部分存在

//store database entries into array
$existingURLs = []; //all urls from database
...
$newdomain = substr($newURL,0,strrpos($newURL,'.')); //removes the '.com'

foreach ($existingURLs as $url) {
    if (strpos($url,$newdomain) !== false) {
        echo 'domain already exists';
    }
}