我有一个查询,我用它从数据库中提取数据,但我发现它错过了第一天和最后一天。在本例中,它跳过了将“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";
这个查询“有效”,但它删除了第一天和最后一天。我怎样才能包括他们?
谢谢
你让自己的生活变得很艰难。
您可以简单地使用这个日期代码获取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_
或pdo
API中使用准备好的参数化语句,而不是将用户提供的值连接到查询中。
不确定您使用的是哪个扩展,所以我只能建议使用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
}