我正在尝试在某些日期之间从表中选择一些时间项,但我认为我有时间戳/日期时间转换问题。
首先,存储在我的log_table
MySQL表中的记录存储在DATETIME
数据类型中,此后,我可以将strtotime()
结果作为日期范围用于SELECT
1}}子句?
其次,我SELECT
列中的log_time
列之间的log_date
可以log_date
,而不会无意中选择我的$date = date("Y-m-d");
$date1 = str_replace('-', '/', $date);
$from_date = date('m-d-Y',strtotime($date1 . "-15 days"));
$date = date("Y-m-d");
$date1 = str_replace('-', '/', $date);
$to_date = date('m-d-Y',strtotime($date1));
$sql2 = "SELECT log_time FROM log_table WHERE log_date >= $from_date AND log_date < $to_date";
$query = $this->db->prepare($sql2);
$query->execute();
$Pro1 = $query->fetchAll();
$Pro1 = array_reverse($Pro1);
print "<pre>";
print_r($from_date);
print "</pre>";
列吗?截至目前,我被归还了一个空数组。
PHP脚本
{{1}}
答案 0 :(得分:6)
为了让您的日期格式正确,您正在做一些非常奇怪的事情。例如,为什么要指定格式为Y-m-d
的数据,仅在下一行中转换并通过字符串替换转换为Y/m/d
?这很奇怪。
我会建议一些事情:
首先,熟悉PHP DateTime
,DateInterval
和相关类。这些是提供日期时最实用的工具。
其次,如果您的MySQL数据库列是日期列,则必须使用Y-m-d
格式,因为这是此列类型的预期格式。
使用DateTime的示例:
$date = new DateTime();
$to_date = $date->format('Y-m-d');
$date->modify('-15 days');
$from_date = $date->format('Y-m-d');
就是这样。这就是获取数据库查询格式的两个日期所需的一切。
第三,您需要引用查询中使用的日期字符串。如果没有这个,你将得到无效的语法。
$sql2 = "SELECT log_time FROM log_table WHERE log_date >= '$from_date' AND log_date < '$to_date'";
第四,您实际应该检查prepare()
,execute()
等的结果,以确保您获得所需的行为并记录错误,以便您可以更好地理解任何问题。
$query = $this->db->prepare($sql2);
if (false === $query) {
// something went wrong get error message and log it here
} else {
$result = $query->execute();
if (false === $result) {
// the query failed log an error message
} else {
// fetch your data
}
}
第五,既然你正在经历使用准备好的陈述的麻烦,你可能要考虑使用参数化的准备语句(这是一个好习惯),尽管在这种情况下,由于你控制了所有语句,因此没有令人信服的安全理由查询输入。
第六,为什么在返回的数组上使用array_reverse()
?这里应该注意,array_reverse()
绝对不能保证任何特定的排序,因为您的查询(如书面形式)不保证任何特定的排序。如果您希望按特定顺序排列数据,只需使用ORDER BY
子句在查询中应用排序即可。目前,您只是颠倒无序结果集的顺序,这是不必要的。注意:您需要在排序中使用的所有字段上都有索引才能优化查询。
例如:
$sql2 = "SELECT log_time FROM log_table WHERE log_date >= '$from_date' AND log_date < '$to_date' ORDER BY log_date DESC, log_time DESC";
答案 1 :(得分:1)
试试这个:
$from_date = date('Y-m-d H:i:s',strtotime('-15 days'));
$to_date = date('Y-m-d H:i:s');
$sql2 = "SELECT log_time FROM log_table WHERE log_date >=".$from_date." AND log_date <".$to_date;