And*_*dre 0 php mysql date between
我有几个日期存储为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;
}
Run Code Online (Sandbox Code Playgroud)
请让我知道我做错了什么!
它没有返回任何行,因为查询没有对有效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'";
Run Code Online (Sandbox Code Playgroud)
该mysql_real_escape_string()函数只是降低了SQL注入的风险,这是您的原始代码容易受到攻击的风险.
MySQL函数STR_TO_DATE()将字符串转换为有效的MySQL DATE类型.%d-%m-%Y是您当前在varchar字符串中的格式,但STR_TO_DATE将其转换为'%Y-%m-%d'MySQL可用于进行范围比较的格式.
此外,我正在使用BETWEENSQL中的语法,因为它是相同的val >= val1 AND val <= val2.它更清晰,更简单:val BETWEEN val1 AND val2.