我的应用中有一个表单。此表单由2个文本字段组成=' date'。现在,当给出两个日期时,日期将发送到PHP脚本,该脚本使用strtotime转换日期。
PHP脚本与mySQL数据库建立连接,该数据库返回带有请求的结果。我想循环遍历所有请求,并检查请求的日期是否在表格发送的两个日期之间。
现在发生了什么:
$sql = "SELECT * FROM Requests";
$stmt = $conn->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
if($result) {
foreach ($result as $row){
$return[]=array('employeeid'=>$row['employeeid']
'id'=>$row['id'],
'startdate'=>$row['startdate'],
'enddate'=>$row['enddate'],
'type'=>$row['type'],
'reason'=>$row['reason']);
}
header('Content-type: application/json');
echo '' . json_encode($return) .'';
return true;
} else {
return false;
}
上面的代码生成了一个包含请求的完美json文件。但正如我所提到的,我想检查上述请求的开始日期是否在表单发送的两个日期之间。
这样的事情:
if (($request_startdate >= $startdate) && ($request_startdate <= $enddate)) {
//generate array with the requests
} else {
//no requests between dates.
}
但是如何遍历请求并检查startdate?
提前致谢。
扬
答案 0 :(得分:0)
您正在采取艰难的方式,在您的选择查询中添加where语句会更容易:
我假设您的表单有两个名为date1,date2
的字段$sql = "SELECT * FROM Requests where startdate>:date1 and enddate<:date2";
$stmt = $conn->prepare($sql);
$stmt->bindValue(':date1',$_POST['date1'],PDO::PARAM_STR);
$stmt->bindValue(':date2',$_POST['date2'],PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
答案 1 :(得分:0)
将您的字符串输入转换为DateTime并将其格式化为ISO date format(或者至少确保它们采用mySQL接受的格式)
$sdt = DateTime::createFromFormat('format of your input', $request_startdate);
$edt = DateTime::createFromFormat('format of your input', $request_enddate);
修改您的sql以仅查询您要使用的行:
SELECT * FROM Requests
WHERE startdate <= :sdt AND :edt >= :edt
然后绑定您的参数(see php doc):
$stmt->bindParam(':sdt', $sdt->format('YYYY-mm-dd 00:00:00'), PDO::PARAM_STR);
$stmt->bindParam(':edt', $edt->format('YYYY-mm-dd 23:59:59'), PDO::PARAM_STR);