我在数据库中有一个客户列表,其列名是邮政编码
目前我的搜索运行SQL
SELECT *
FROM customer
WHERE postcode LIKE '%".$_POST["search term"]."%'
哪个工作正常,但如果数据库中的一行有(SS1 1AB)的邮政编码,而有人输入(SS11AB),我怎样才能找到正确的行?
基本上我想能够搜索每一个组合等
答案 0 :(得分:0)
你可能做的唯一方法是使用正则表达式或空格替换。
PHP: $term = str_replace(' ', '', $_POST["search term"]);
Query: Select * from customer where REPLACE(postcode, ' ', '') LIKE '%".$term."%'
尽管如此,在插入数据格式化方面要好得多,因为随着表的增长,查找将变得越来越昂贵。我的一个宠物讨厌的是使用邮政编码作为身份验证或验证数据的网站,然后强迫您使用特定的符号。我之前看到人们也会在帖子代码中消除空间,所以你应该在插入之前对格式进行规范化,或者强制执行一种格式(我更喜欢前一种选择,但后者更容易)。
此外,您的查询容易受到注入攻击。但那是另一个话题
答案 1 :(得分:0)
除了SQL注入,你应该整理出来。
该列应为SS11AB,然后在str_replace(" ", "", $_POST['search term'])
您可以通过
使列看起来像这样update customer set postcode = replace(postcode, " " , "")
这将删除列中的所有空格,然后您只需要在没有上述函数的空格的情况下进行查询
答案 2 :(得分:0)
Mysql允许正则表达式匹配,这将是一种方式。我会做的是标准化数据库中的单个正确表示 - 并验证输入。这样可以避免SQL注入问题并使匹配更容易。它还允许您在数据输入数据库时过滤拼写错误。