PHP选择日期等于DateTime的位置

时间:2016-12-12 15:34:16

标签: php mysql date datetime

我有一个网站,其帖子记录在MySQL表中,其值为Added,设置为DateTime。存储值的示例是2016:12:12 15:30:21

所以我现在想要使用php脚本和added.php?date=2016-12-12之类的URL参数来构建一个选择特定日期所有记录的页面。

所以我的php脚本就是:

<?php
    if(isset($_GET["date"])){
        $date = $_GET["date"];
    } else {
        header("Location: $site_url");
        exit();
    };
?>

我现在如何实际选择具有此日期的行?我正在尝试使用:

$rows_sql = "SELECT id FROM posts WHERE added = '$date';

但这不起作用。有什么想法,我怎么能以我的格式工作?

2 个答案:

答案 0 :(得分:1)

您能否按照以下方式更改查询行:

$rows_sql = "SELECT id FROM posts WHERE Date(added) = '$date';

答案 1 :(得分:0)

您需要注意的事情很少:

您的代码可以用于SQL注入。

您需要以适当的格式提供日期。为此,我建议使用DateTime :: createFromFormat函数或strtotime。让我们用更简单的方式(strtotime)

来做
<?php 

$parsedDate = strtotime($_GET['date']);

if (false !== $parsedDate) {
    $date = date('Y-m-d H:i:s', strtotime($_GET);
    $rows_sql = "SELECT id FROM posts WHERE added = '$date'";
} else {
    die("date is in wrong format");
}

基本上它会检查字符串是否可以转换为时间戳strtotime函数,如果可能(非错误),它将使用DB可以处理的格式转换它YYYY-mm-dd hh:mm:ss

通常,如果您想从某个时间段中选择,那么请使用&gt;等运算符。 &LT;和BETWEEN可能会派上用场。例如,如果要从GET日期参数

中指定的整天选择行
    if($date = strtotime($_GET['date'])) {
         $today = date('Y-m-d', $date);
         $rows_sql = "SELECT id FROM posts WHERE added BETWEEN '$today 00:00:00' AND '$today 23:59:59'";
    }