我想从Ms Access数据库中选择两个数据和PHP时间之间的数据。
我使用了这段代码。
$dbc = odbc_connect("Attend", "", "");
if(!$dbc) {
exit("Cannection Faild");
}
$in = date('n/j/Y h:i:s',strtotime('2019-01-30 00:00:01'));
$out = date('n/j/Y h:i:s',strtotime('2019-01-30 23:59:59'));
$query = "SELECT * FROM CHECKINOUT WHERE USERID = 214 AND CDate(CHECKTIME) between '$in' and '$out'";
$results = odbc_exec($dbc, $query);
if(!$results) {
exit("Error in SQL");
}
while (odbc_fetch_row($results)) {
echo odbc_result($results, "CHECKTIME")."<br/>";
}
odbc_close($dbc);
但这没有显示。但是,如果我用以下方法更改了入场日期和出场日期:
$in = date('n/j/Y h:i:s',strtotime('2019-01-29 00:00:01'));
$out = date('n/j/Y h:i:s',strtotime('2019-01-31 23:59:59'));
它将显示意外结果。如下所示:
2018-01-03 08:26:52
2018-01-03 20:19:09
2018-01-30 07:55:38
2018-01-30 14:37:09
2019-01-30 11:48:27
2019-01-30 12:17:26
2019-01-30 12:38:33
2019-01-30 13:29:27
2019-01-30 14:15:20
2019-01-30 18:11:27
2019-01-30 19:09:10
2019-01-30 19:28:43
2019-01-31 10:28:51
我找到了解决方法here。但这是行不通的。这没什么。
那么,我需要在哪里更改? 谢谢
答案 0 :(得分:1)
从未尝试从PHP查询Access DB,但由于您使用的是ODBC,因此与其他编程语言应该没有任何区别
尝试一下
$in = '2019-01-30 00:00:01';
$out = '2019-01-30 23:59:59';
$query = "SELECT * FROM CHECKINOUT WHERE USERID = 214 AND CDate(CHECKTIME) between #$in# and #$out#";
日期在MS Access SQL中应该用#
括起来。
而且我看不出要先将日期中的字符串转换为字符串的原因,因为如果用#
括起来,MS Access将把您的字符串识别为日期,并且如果您使用标准格式,则应正确解析它们。国际格式Y-m-d H:i:s
此外,如果CHECKTIME列已正确定义为数据库中的日期,则CDate()
不必要。
答案 1 :(得分:0)
格式丢失AM / PM
'n/j/Y h:i:s A'