php - 从日期范围之间的mysql表列中选择

Aar*_*cki 2 php mysql

我试图在某些日期之间从表中选择一些时间项,但我认为我有时间戳/日期时间转换问题.

首先,存储在我的log_tableMySQL表中的记录存储在DATETIME数据类型中,从此,我可以将strtotime()结果用作我的SELECT子句中的日期范围吗?

其次,我可以SELECTlog_time列中日期之间的log_date列中无意中选择我的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>";
Run Code Online (Sandbox Code Playgroud)

Mik*_*ant 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');
Run Code Online (Sandbox Code Playgroud)

而已.这就是获取数据库查询格式的两个日期所需的全部内容.

第三,您需要引用查询中使用的日期字符串.如果没有这个,你将得到无效的语法.

$sql2 = "SELECT log_time FROM log_table WHERE log_date >= '$from_date' AND log_date < '$to_date'";
Run Code Online (Sandbox Code Playgroud)

第四,您应该实际检查等的结果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
    }
}
Run Code Online (Sandbox Code Playgroud)

第五,既然你正在经历使用预准备语句的麻烦,你可能要考虑使用参数化预处理语句(这是一个好习惯),尽管在这种情况下,由于你控制所有查询输入,因此没有令人信服的安全性原因.

六,为什么要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";
Run Code Online (Sandbox Code Playgroud)