Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在一个文本字段中搜索城市、州和邮政编码_Php_Mysql - Fatal编程技术网

Php 在一个文本字段中搜索城市、州和邮政编码

Php 在一个文本字段中搜索城市、州和邮政编码,php,mysql,Php,Mysql,我正在尝试在一个文本字段中搜索城市、州和邮政编码 <form action="" method="post"> <input type="text" name="search_loc" /> <input type="text" name="search_sty" /> <input type="submit" value="search" /> </form> $query = "SELECT nam

我正在尝试在一个文本字段中搜索城市、州和邮政编码

<form action="" method="post">
   <input type="text" name="search_loc" />
   <input type="text" name="search_sty" />
   <input type="submit" value="search" />
</form>

$query = "SELECT
       name, street, city, state, zip_code, phone_number, style, description, time
      FROM sesh
      WHERE city
      LIKE '%$search_loc%'
      OR state
      LIKE '%$search_loc%'
      OR zip_code
      LIKE '%$search_loc%'
      AND style LIKE '%$search_sty%'
      ";

$query=“选择
姓名、街道、城市、州、邮政编码、电话号码、样式、描述、时间
来自sesh
哪个城市
类似“%$search\u loc%”
或州
类似“%$search\u loc%”
或邮政编码
类似“%$search\u loc%”
样式为“%$search\u sty%”
";

这种方法一次只适用于一种类型。所以,我可以通过状态本身来搜索状态。我想能够键入:“芝加哥,伊利诺伊州60493”或其他什么,并有它拉结果。有什么办法可以帮你吗?谢谢。

选项1是在空格(“Chicago,,“IL”,“60493”)上拆分输入的搜索词(“Chicago,IL 60493”),然后执行您已经为这些段中的每一段编写的相同搜索操作(可能在去掉任何标点后)

或者,也许更有效地,您可以看看使用MySQL的全文搜索。查看本教程,了解如何使用它的一些提示。

这应该可以:

  $query = "SELECT name, street, city, state, zip_code, phone_number, style, description, time
            FROM sesh
            WHERE '$search_loc' like concat('%', city, '%', state, '%', zip_code, '%')
            AND style LIKE '%$search_sty%'";

只需确保转义$search\u loc和$search\u sty以避免潜在的sqli攻击。

您可以将正在搜索的列连接到结果集中的“虚拟”列中,然后将搜索项与该连接进行比较,如下所示:

 SELECT * FROM sesh WHERE CONCAT(city, ', ', state, ' ', zip_code) = ?
假设匹配必须精确。如果人们可以输入,例如“芝加哥,伊利诺伊州”或“IL 60493”,那么您可以恢复为类似:

 SELECT * FROM sesh WHERE CONCAT(city, ', ', state, ' ', zip_code) LIKE %?%
(其中?表示查询的参数)

在这些示例中,用户的标点符号必须与您的标点符号完全匹配(城市后跟命令和一个空格,州后跟一个空格)。但如果您想更进一步,请从用户输入的项目中去掉所有空白和标点符号,然后执行以下操作:

 SELECT * FROM sesh WHERE CONCAT(city, state, zip_code) LIKE %?%

谢谢,我会看看那篇文章。有选择权。我不完全明白。我可以为punc做str_替换。和空间。但是,我有城市、州和邮政编码在不同的列中。因此,在查询中一次只能匹配一列。如何在一个类似的实例中使用所有三个?我可以看出,如果我将city state和zip放在一列中,而不使用逗号,这将是多么的可能。然后在搜索过程中把所有的推测都去掉了。对不起,我刚才在那个问题上绕了很多圈。但是,我正在努力理解我如何做到这一点,“接近”投票是怎么回事。这是一个完全合理的问题。