我希望用户能够提交一个URL,该URL会根据数据库进行检查以查看是否已有条目。但是,我希望检查也忽略该域。
例如如果 www.example.com 存在,那么 www.example.net , www.example.gov < / em>等也应该被拒绝。但是,此处的SQL检查将返回0记录,因为它们被认为是不同的。
有没有有效的方法呢?我能想到的唯一方法是划分给定的URL并获取主域并使用SQL&#39; Like&#39;来搜索该特定域。功能。但是,这会在处理像blogspot等网址时出现问题。
我很难过,任何建议都会很棒!
答案 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';
}
}