gpt4 book ai didi

php - 在日期之间搜索(日期为 VARCHAR)

转载 作者:行者123 更新时间:2023-12-01 00:13:28 25 4
gpt4 key购买 nike

我将几个日期存储为 varchar,格式如下:01-01-2012

我想在日期之间进行搜索,但遗憾的是它没有按我预期的那样工作。我寻找了具有相同问题(有点)的其他线程,但那里提供的答案对我不起作用。

这是我的代码:

$fromday = $_POST['fromday'];
$frommonth = $_POST['frommonth'];
$fromyear = $_POST['fromyear'];

$tillday = $_POST['tillday'];
$tillmonth = $_POST['tillmonth'];
$tillyear = $_POST['tillyear'];

$vanaf = "$fromday-$frommonth-$fromyear";
$tot = "$tillday-$tillmonth-$tillyear";

// zoeken
$sel = "SELECT * FROM bestelling WHERE verzenddatum >= '$vanaf' AND verzenddatum <= '$tot'";
$dosel = mysql_query($sel) or die(mysql_error());

while($row = mysql_fetch_assoc($dosel))
{
$datum = $row['verzenddatum'];

echo $datum;
}

请让我知道我做错了什么!

最佳答案

它没有返回任何行,因为查询没有对有效的 DATE 进行比较或 DATETIME领域。您应该将日期存储为 DATE类型,但你可以做的是:

// Switch the order of date elements:
$vanaf = mysql_real_escape_string("$fromyear-$frommonth-$fromday");
$tot = mysql_real_escape_string("$tillyear-$tillmonth-$tillday");

$sel = "SELECT * FROM bestelling WHERE STR_TO_DATE(verzenddatum, '%d-%m-%Y') BETWEEN '$vanaf' AND 'tot'";

mysql_real_escape_string()函数只是降低了 SQL 注入(inject)的风险,这是您的原始代码容易受到攻击的风险。

MySQL 函数 STR_TO_DATE() 将字符串转换为有效的 MySQL DATE类型。 %d-%m-%Y是您当前在 varchar 字符串中的格式,但是 STR_TO_DATE将其转换为 '%Y-%m-%d'然后 MySQL 可以使用它来进行范围比较。

此外,我正在使用 BETWEEN SQL 中的语法,因为它与 val >= val1 AND val <= val2 相同.它更清晰、更简单:val BETWEEN val1 AND val2 .

关于php - 在日期之间搜索(日期为 VARCHAR),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11350256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com