0

我在数据库中有一个客户列表,列名是邮政编码

目前我的搜索运行 SQL

SELECT *
FROM customer
WHERE postcode LIKE '%".$_POST["search term"]."%'

哪个工作正常但是如果数据库中的一行具有(SS1 1AB)的邮政编码并且有人输入(SS11AB),我怎样才能让它找到正确的行?

基本上我希望能够搜索每一个组合等

4

3 回答 3

0

Mysql 允许正则表达式匹配,这将是一种方式。我会做的是标准化数据库中的单个正确表示 - 并验证输入。这将避免 SQL 注入问题并使匹配更容易。它还允许您在将数据输入数据库时​​过滤掉拼写错误。

于 2013-09-02T20:01:28.133 回答
0

您可能做的唯一方法是使用正则表达式或空格替换。

PHP: $term = str_replace(' ', '', $_POST["search term"]);

Query: Select * from customer where REPLACE(postcode, ' ', '') LIKE '%".$term."%'

不过话虽如此,最好还是在插入时格式化数据,因为随着表的增长,查找的运行成本会越来越高。我最讨厌的一个网站是使用邮政编码作为身份验证或验证数据的网站,然后强迫您使用特定的符号。我以前也见过人们在他们的邮政编码中使用空格,所以你应该在插入之前总是规范化格式,或者强制执行格式(我更喜欢前一个选项,但后者更容易)。

此外,您的查询容易受到注入漏洞的攻击。但那是另一个话题

于 2013-09-02T19:57:01.500 回答
0

除了 SQL 注入之外,你应该解决哪些问题。

该列应为 SS11AB,然后查询str_replace(" ", "", $_POST['search term'])

你可以让你的专栏看起来像这样

update customer set postcode = replace(postcode, " " , "") 

那将删除列中的所有空格,然后您只需要使用上面的函数查询没有空格

于 2013-09-02T19:57:53.140 回答