使用PHP在MySQL中搜索多列

3
我已经通过多种方式在互联网上搜索了很久,但是无法找到我的问题的答案。我正在自学网站开发,尝试创建一个在线房地产网站。
我的问题出现在我尝试搜索房产时。例如,我想搜索特定区域或邮政编码中的所有属性。当我尝试搜索多个字段,如地址行1、地址行2、邮政编码和区域(如伦敦SW1V)时。
以下是我目前正在使用的查询,并希望将其更改为满足我需求的方式:
SELECT property.propertyid, property.propertyname
FROM   property
WHERE  property.address_1 LIKE '%txtSearchField%'
    OR property.address_2 LIKE '%txtSearchField%'
    OR property.postcode  LIKE '%txtSearchField%'
    OR property.area      LIKE '%txtSearchField%'

1
问题到底是什么?你的查询看起来没问题。我可以确认你确实正确地插值了变量,并且没有在表中搜索“txtSearchField”吗? - Rawkode
如果你不使用联接查询,就不需要在属性前面放置表名,可以直接使用propertyId,propertyName等。 - jbduzan
2个回答

4

这不是最高效的方法,但对于低流量页面来说是最简单和最好的方式:

SELECT property.propertyid, property.propertyname
FROM   property
WHERE  CONCAT(property.address_1, ' ',
              property.address_2, ' ',
              property.postcode, ' ',
              property.area) LIKE '%txtSearchField%'

这对您应该起作用。

3
在这个SQL查询构造中,无论txtSearchField的值是什么(即使为空),都会执行它。你还忘了在变量txtSearchField前面放置美元符号 $,所以无法从输入表单中获取任何结果,因为您总是搜索文本txtSearchField,而不是变量$txtSearchField的内容。(我猜您使用一个名为txtSearchField的HTML文本输入的输入表单)。请记得将HTML表单的方法设置为"post",因为如果省略它,默认为"get"。
如果我没错的话,您应该按照以下方式重新编写代码:
    <?php
    //Sanitize user input
    $txtSearchField = filter_var($_POST['txtSearchField'], FILTER_SANITIZE_STRING);
    //SQL query
    $query = "SELECT property.propertyid, property.propertyname
    FROM   property
    WHERE  CONCAT(property.address_1, ' ',
                  property.address_2, ' ',
                  property.postcode, ' ',
                  property.area) LIKE '%$txtSearchField%'" //see the $ sign here
//Finally, execute query and get result
$result = mysql_query ($query) or die ('SQL error occured: '.mysql_error());
while ($array = mysql_fetch_assoc($result)) {
  echo $result['address_1'].'/'.$result['address_2'].'/'.$result['postcode'].'/'.$result['area'].'<br/>';
}
    ?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接