日期时间的SQL请求

时间:2018-07-25 13:52:58

标签: mysql

我正尝试发出一个SQL请求(来自PHP)以根据日期提取数据。 我的数据库是:id(int),名称(text),date(datetime)

我在网络上和stackoverflow上搜索了不同的方式,并测试了以下内容:

SELECT * FROM myBase WHERE date BETWEEN $date1 AND $date2

SELECT * FROM myBase WHERE DATEDIFF( date, $date2 )

但它们都不起作用

我完整的代码是:

    require 'connect.php'; // this connection works I can add element to the database
    $date1 = new DateTime('2018/01/01 10:00:00');
    $date2 = new DateTime('2019/01/01 10:00:00');
    $sql = "SELECT * FROM myBase WHERE date BETWEEN $date1 AND $date2";  
    //$sql = "SELECT * FROM myBase WHERE DATEDIFF(date, $date2 )";

    $req = $pdo->query($sql);  

    while($data = $req->fetch()) 
    {
        echo $data['id'];
        echo" ";
    }

但是它不起作用:什么也不会返回(当然,在我的数据库中,我的日期介于date1和date2之间)。

你知道出什么问题了吗?

3 个答案:

答案 0 :(得分:0)

您可以指定日期应大于date1且小于date2:

SELECT * FROM myBase WHERE date >= $date1 AND date <= $date2

而且,正如Strawberry正确指出的那样,请使用以下代码安全地插入参数:

$query = "SELECT * FROM myBase WHERE date >= :start AND date <= :end";

因此,您的代码应为:

try{
    $req= $db->prepare($query);
    $result = $req->execute(array(
        'start'=>$date1->format('Y-m-d'), 
        'end'=>$date2->format('Y-m-d')
    ));
    $id_contratto = $db->lastInsertId();
}catch(PDOException $ex){
    //handle errors here
}

while($data = $req->fetch()) 
{
    echo $data['id'];
    echo" ";
}

答案 1 :(得分:0)

好像查询是错误的

SELECT * FROM myBase WHERE bookingDate BETWEEN $date1 AND $date2";  

SELECT * FROM myBase WHERE DATEDIFF( BookingDate, $date2 ) > 0

答案 2 :(得分:0)

查询没有问题,但是$ date1和$ date2。 $ date1和$ date2仅保留为字符串格式。     $ date1 ='2018-01-01 10:00:00';     $ date2 ='2019-01-01 10:00:00';