我需要做的是检查是否已经使用php在数据库中提交了网址。
我有一个数据库表,用于存储用户提交的URL。但我想在将数据库插入数据库之前检查数据库中是否已提交了URL。 例如, 如果其中任何一个已插入数据库中,则http://www.example.com,http://www.example.com/,http://example.com和http://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.html和http://www.example.com/newpage.html以及没有www的http://example.com/newpage.html(userinput都是相同的网页,所以我需要一个函数来检查它并返回false如果网址在阵列中可用。我希望我现在澄清自己。
所以我认为到目前为止,它不是在url字段中检查域或在mysql表中创建唯一键。我想我们需要使用regExp。有什么帮助吗?
答案 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)