检查是否已在php中的数据库中提交了URL

时间:2010-02-25 11:03:53

标签: php mysql regex

我需要做的是检查是否已经使用php在数据库中提交了网址。

我有一个数据库表,用于存储用户提交的URL。但我想在将数据库插入数据库之前检查数据库中是否已提交了URL。 例如, 如果其中任何一个已插入数据库中,则http://www.example.comhttp://www.example.com/http://example.comhttp://example.com/等网址应返回false,因为它们都是相同的网址。 我想我们可以通过使用正则表达式完成这项工作。但我在正则表达式方面有点弱,所以需要你的帮助。 谢谢

被修改

您好,我们假设网址是数组而非数据库只是为了清楚。我知道唯一键和匹配的URL与数据库的结果。但在这里我有一个

如果仔细看一下就会有不同的问题。

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

情况下 用户提交网址。假设http://example.com/newpage.html

现在,$ urls数组中的网址http://www.example.com/newpage.htmlhttp://www.example.com/newpage.html以及没有www的http://example.com/newpage.html(userinput都是相同的网页,所以我需要一个函数来检查它并返回false如果网址在阵列中可用。我希望我现在澄清自己。

所以我认为到目前为止,它不是在url字段中检查域或在mysql表中创建唯一键。我想我们需要使用regExp。有什么帮助吗?

4 个答案:

答案 0 :(得分:0)

不清楚问题中的哪些网址。 URL是资源。如果您的意思是提交由保存到数据库的GET方法发送的HTTP变量,则可以使用其中一个变量的值作为在数据库中搜索的主键。

答案 1 :(得分:0)

就像Ben James所说,www.example.com和example.com不一样。您对URL的含义也有点模糊。

但是如果你想检查example.com是否已经存在。只需使用like选项计算数据库:

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

从完整网址中提取example.com。如果计数> 0域已在数据库中。你将不得不微调这个解决方案,但我应该使用这样的东西。

答案 2 :(得分:0)

数据库是应用程序中的另一个层。 Regex在这里没有帮助,因为你必须首先检查数据库中的内容才能在结果集上使用Regex。

但是,您只需创建存储网址UNIQUE的列并使用INSERT IGNORE

来自MySql手册

  

如果使用IGNORE关键字,则执行INSERT语句时发生的错误将被视为警告。例如,如果没有IGNORE,则复制表中现有UNIQUE索引或PRIMARY KEY值的行会导致重复键错误,并且语句将中止。使用IGNORE时,仍未插入行,但未发出错误。

这仍然会插入 example.com www.example.com ,因为它们实际上是不同的字符串。您可以在插入之前使用parse_url进行检查和准备。

相关:

答案 3 :(得分:0)

也许使字段“唯一”将有助于这种方式mysql将检查值。如果您获得1062的返回代码,那么您将知道它已经在数据库中。

当然,如果您的帐户数量太多,可能不是一个好主意。你应该用php检查URL,你总是以相同的方式插入它们。 (比如添加或删除'http://'或www)