我正尝试发出一个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之间)。
你知道出什么问题了吗?
答案 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';