提问者:小点点

mysql“Between and”查询,包括第一天和最后一天


我有一个查询,我用它从数据库中提取数据,但我发现它错过了第一天和最后一天。在本例中,它跳过了将“scadenze”设置为“01-05-2021”的记录,而遗漏了将“scadenze”设置为“31-05-2021”的记录。这几天我怎么也能融入?

这是我使用的查询:

$anno = date('Y'); // CURRENT YEAR
$mese = (date('m')+1); // THE MONTH THAT I NEED (THE NEXT ONE)

// FIRST DAY OF THE MONTH

$giornoinizio = '01';
$a = '';
$a .= $anno . '-' . $mese .'-' . $giornoinizio;

// LAST DAY OF THE MONTH

$giornofine = cal_days_in_month(CAL_GREGORIAN,$mese,$anno);
$b = '';
$b .= $anno . '-' . $mese .'-' . $giornofine;

$sql = "SELECT * FROM condominio WHERE scadenze BETWEEN '$a' AND '$b' ORDER BY scadenze ASC";

这个查询“有效”,但它删除了第一天和最后一天。我怎样才能包括他们?

谢谢


共1个答案

匿名用户

你让自己的生活变得很艰难。

您可以简单地使用这个日期代码获取2个日期,然后将date()函数添加到时间戳中。

$a = date('Y-m-d', strtotime('first day of +1 month'));

$b =  date('Y-m-d', strtotime('last day of +1 month'));

$sql = "SELECT * FROM DATE(condominio) WHERE scadenze BETWEEN '$a' AND '$b' ORDER BY scadenze ASC";

但是这种数据连接到查询中是一种不好的习惯,如果进入它,会鼓励您进行SQL注入攻击。即使您正在转义输入,它也不安全!您应该始终在mysqli_pdoAPI中使用准备好的参数化语句,而不是将用户提供的值连接到查询中。

不确定您使用的是哪个扩展,所以我只能建议使用PDO解决方案

$a = date('Y-m-d', strtotime('first day of +1 month'));
$b =  date('Y-m-d', strtotime('last day of +1 month'));

$sql = "SELECT * FROM DATE(condominio) 
        WHERE scadenze BETWEEN :a AND :b 
        ORDER BY scadenze ASC";
$stmt = $con->prepare($sql);
$stmt->execute([':a'=>$a, ':b'=>$b]);

$result = $stmt->fetchAll();

foreach ( $results as $row ){
    // process each row
}