【问题标题】:PHP & MYSQL Dynamic Search with multiple fields fails having date range具有多个字段的 PHP 和 MYSQL 动态搜索在日期范围内失败
【发布时间】:2017-07-12 02:02:20
【问题描述】:

我已经使用 PHP 和 MySQL 构建了一个动态搜索。一切正常,代码可以同时搜索多个值。

$query="";
$query .=" select * from customers where 1 ";  

if(strlen($adv_s_city)>0){  
    $query .=" and  city = '$adv_s_city'  ";
}             
if(strlen($adv_s_personalIdType)>0)
{             
    $query .=" and  pesonal_identity_type = '$adv_s_personalIdType'  ";
}
if(strlen(isset($_POST['adv_s_gender'])) > 0)
{                 
    $query .=" and  gender = '$adv_s_gender'  ";
}

但是,当我还向其中添加以下代码并指定两个日期之间的日期范围时,它会为我提供这两个日期之间的值,但是搜索其他字段将不起作用或跳过上面的代码。出了什么问题?!

if(strlen($adv_s_FromDate)>0 && strlen($adv_s_ToDate)>0)
{
    $query .=" and  (date between '$adv_s_FromDate' and '$adv_s_ToDate')  ";
}

【问题讨论】:

  • 最后输入echo $query 并检查您的查询,它将帮助您调试。
  • 这听起来可能很疯狂,但是这个简单的 echo $query 让我对我正在做什么和请求什么有了足够的了解,我可以设法解决这个问题。非常感谢:)
  • 现在看看 sql 注入和参数化查询
  • @Stawbery,你这是什么意思?我该怎么办?

标签: php mysql search dynamic field


【解决方案1】:

您的代码生成的查询类型对我来说很好用。我正在使用 mysql 版本 5.7.13。可能错误出在生成查询的代码中。尝试打印完整的查询并在 mysql 中运行以获得清晰的视图。可能有些变量是空的,所以这些条件不会添加到查询中。

我在我的数据库上使用了类似的查询,如下所示:

SELECT * FROM database.subsection where 1 and subsection_type='textbox' and subsection_position=2 and (creation_time between '2016-09-29 18:46:41' and '2016-09-30 10:56:40');

此查询在我的数据库中为我提供了正确的结果。请检查你的代码,也许你在那里遗漏了一些东西。

【讨论】:

  • 感谢您的重播。是的,你是对的。错误来自我在日期搜索条件之前使用的代码。
  • @BayarShahab 你应该解决这个问题。 :)
猜你喜欢
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
相关资源
最近更新 更多