php - 需要有关涉及日期范围的 MySQL/PHP 查询的帮助

标签 php mysql datetime date-range date-comparison

本质上,我需要从数据库表中检索一些帐户信息,其中他们有一个通过 GET 传递的客户端的客户端,并且帐户放置日期 (dateplaced) 再次从日历字段传递的开始日期和结束日期之间通过 GET。

下面的查询不返回任何行。我已经验证查询的 SELECT 和 FROM 部分按预期工作,并且客户端从 GET 选择工作正常,因此留下了日期问题。 “dateplaced”以“dd/mm/yyyy”格式作为 varchar 存储在数据库中。经过研究,我发现 mysql 需要“yyyy-mm-dd”格式的日期。我已经将 GET 数据之间的比较的两个部分拼凑在一起,并且相当确定它们的格式正确。我尝试简单地使用“dateplaced”而不是 str_to_date() 但它不起作用,所以我尝试了 str_to_date() 如下所示,但它仍然不起作用。

有人能发现我的问题吗?这让我发疯。

$query = mysql_query("SELECT accountnumber, firstname, middlename, lastname, currentbalance FROM dbase WHERE clientname = '" . $_GET['client'] . "' AND str_to_date(dateplaced, '%Y-%m-%d') BETWEEN '" . $_GET['calendar_start_year'] . "-" . $_GET['calendar_start_month'] . "-" . $_GET['calendar_start_day'] . "' AND '" . $_GET['calendar_end_year'] . "-" . $_GET['calendar_end_month'] . "-" . $_GET['calendar_end_day'] . "' ORDER BY lastname") or die(mysql_error());

最佳答案

str_to_date()采用现有字符串的格式,而不是所需的字符串。所以你需要 str_to_date(dateplaced, '%d/%m/%Y') 获取 Y-m-d。

在查询之外创建日期。调试起来更容易。

$clean_name=mysqli_real_escape_string($_GET['client']);
$start_date=date_create("{$_GET['calendar_start_year']}-{$_GET['calendar_start_month']}-{$_GET['calendar_start_day']}")->format('Y-m-d');
$end_date=date_create("{$_GET['calendar_end_year']}-{$_GET['calendar_end_month']}-{$_GET['calendar_end_day']}")->format('Y-m-d');

$q="SELECT accountnumber, firstname, middlename, lastname, currentbalance 
FROM dbase 
WHERE clientname = '{$clean_name}' 
  AND str_to_date(dateplaced, '%d/%m/%Y') BETWEEN '$start_date' AND '$end_date' 
ORDER BY lastname;

PS,清理所有变量。可能存在引号或其他需要转义的字符(或邪恶的黑客尝试)。 mysqli_real_escape_string() 是您应该使用的。

关于php - 需要有关涉及日期范围的 MySQL/PHP 查询的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1509897/

相关文章:

php - Yii - 与同一模型的多个关系

php - MySQL Date_Format 不适用于

php - 如何从准备好在 PHP 中进行双面打印的 HTML 模板批量生成 PDF?

mysql - MariaDB:未知数据类型 "MYSQL_JSON"

php - 从一个 php 文件生成时的自定义 URL

javascript - if 和 else 语句一起执行

java - return json.getString ("key") 当我想要获取俄语字符时返回 null

php - 如何实现跨两个表的搜索查询?

linux - touch utility 设置相对时间

datetime - 如何在 Go 中获取序号指示符(第 1、第 2、第 3 等)