【问题标题】:Query for search engine brings back same results regardless of input无论输入如何,搜索引擎的查询都会返回相同的结果
【发布时间】:2016-02-07 20:19:52
【问题描述】:

我正在为一个搜索引擎编写一个脚本,其中所有字段都需要能够自己提交信息,或者与其他字段结合使用。这些字段是名称、城市、州、邮政编码、国家/地区、Category_1。代码如下:

"SELECT * FROM table WHERE Name LIKE '%$get_name%' 
OR City LIKE '%$get_city%' 
OR State LIKE '%$get_state%' 
OR ZIP LIKE '%$get_zip%' 
OR Country LIKE '%$get_country%' 
OR Category_1 LIKE '%$get_category1%' 
LIMIT 0, 10";

如果我从输入中回显所有变量,则它们都正确。但是,无论用户输入是什么,查询都会产生相同的结果。有什么建议么?好像是MYSQL查询本身的问题。

【问题讨论】:

  • 将查询放入变量并回显。确认这些值不为空。
  • 只是为了确保它是有意的:它们都是 OR - 所以任何参数为空白,然后它将返回所有数据。
  • @smozgur 我误解了 OR 条件的作用。你能建议一个更好的条件来研究吗?
  • 您是否要同时让所有条件字段匹配?那么你需要AND。然后你仍然应该检查空变量。更好的主意,使用“有效”发布的变量创建您的 SQL 字符串。如果您希望所有字段同时匹配,请使用 AND。如果您无法使其正常工作,我可以为此提供示例代码。
  • 哦!它已经被下面的另一个用户发布为答案。所以你现在应该没问题,但我仍然坚持你需要 AND。原因是:它会返回所有城市,即使用户使用 OR 为请求的 $get_category1 输入了特定城市。我想这已经足够解释了。

标签: php mysql


【解决方案1】:

如果任何变量为空,您将获得所有结果。 它与Name LIKE '%%' = 所有结果相同。

你可以这样使用它:

$fields = array(
    'Name'  => $get_name,
    'City'  => $get_city,
    'State' => $get_state,
    'ZIP'   => $get_zip,
    'Country'   => $get_country,
    'Category_1'    => $get_category1,
);

$query = "";
foreach($fields as $k => $data) {
    if(trim($data) != '') {
        $query .= ($query ? ' OR ' : 'WHERE ') . "$k LIKE '%% $data'";
    }
}

if($query) {
    $query = "SELECT * FROM table $query LIMIT 0, 10";
}

【讨论】:

  • 我想我误解了条件的作用。您能建议使用不同的条件吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多