我正在尝试从某个日期之间的表中选择多个时间项,但我认为我遇到了时间戳/日期时间转换问题。
首先,我的 log_table
MySQL 表中存储的记录是以 DATETIME
数据类型存储的,以后我可以使用 strtotime()
结果作为我的 SELECT
子句中的日期范围?
其次,我是否可以从 log_date
列中的日期之间的 log_time
列中SELECT
,而不会无意中选择我的 log_date
专栏?截至目前,我返回了一个空数组。
PHP 脚本
$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>";
最佳答案
您正在做一些非常奇怪的事情,试图让您的日期格式正确。比如,为什么指定一个格式为Y-m-d
的数据,在下一行转过来,通过字符串替换转换为Y/m/d
?这很奇怪。
我会提出一些建议:
首先,熟悉 PHP DateTime
、DateInterval
和相关类。这些确实是为处理日期而提供的最有用的工具。
其次,如果您的 MySQL 数据库列是日期列,您必须使用 Y-m-d
格式,因为这是该列类型的预期格式。
使用日期时间的例子:
$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";
关于php - 从日期范围之间的 mysql 表列中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24188800/