【发布时间】:2017-05-03 00:11:36
【问题描述】:
我正在尝试根据用户输入的月份和年份以及表名从数据库中获取一些数据。
从月份和年份我计算 from_date 和 to_date 但是如果我将日期放在 $from_date 和 $todate 之间,则查询不起作用。
$tableName = $_REQUEST['tableName'];
$month = $_REQUEST['monthName'];
$year = $_REQUEST['yearName'];
// echo json_encode($tableName);
$tableName = json_encode($tableName);
//echo $tableName;
$from_date = date('Y-m-d',strtotime($year."-".$month."-01"));
//echo json_encode($from_date);
//$to_date = date('Y-m-d',strtotime($year."-".$month."-01"));
$to_date = date('Y-m-t', strtotime($from_date));
//echo json_encode($to_date);
$conn = new PDO("sqlite:../../assets/rule_data.db");
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//$sqlQuery = "select * from $tableName WHERE date >= '".$from_date."' AND date <= '".$to_date."' ";
//$sqlQuery = "SELECT * FROM $tableName WHERE v_cr_sysdate >= '".$from_date."' AND v_cr_sysdate <= '".$to_date."' ";
//$sqlQuery = "SELECT * FROM $tableName";
//$sqlQuery = "select * from $tableName WHERE date >= '".convert('$from_date','%d-%m-%y')."' AND date <= '".date($to_date)."' ";
$sqlQuery = "select * from $tableName WHERE date between '". date('Y-m-d', strtotime($from_date))."' ";
$sqlQuery .= " AND date <='". date('Y-m-d', strtotime($to_date))."' ";
$query = $conn->query($sqlQuery);
echo json_encode($query);
echo json_encode(["riskModules"=>$query->fetchAll(PDO::FETCH_ASSOC)]);
如果我删除 AND 条件并仅保留日期 >= '$from_date' 它会起作用,但不适用于从日期到日期的日期范围。
请帮助我在对 where 子句进行 AND 查询时出错的地方。
【问题讨论】:
-
语法是
date BETWEEN 'first-date' AND 'second-date',而不是date BETWEEN 'first-date' AND date <= 'second-date' -
^ 正确。之间从句的语法是错误的。
-
你把它和替代品
date >= 'first-date' AND 'date <= 'second-date'混在一起了 -
$sqlQuery = "select * from $tableName WHERE date between '$from_date' AND '$to_date' "; $query = $conn->query($sqlQuery);回声 json_encode($query); echo json_encode(["riskModules"=>$query->fetchAll(PDO::FETCH_ASSOC)]);
-
我更改了查询,但基于 echo 语句,我可以看到查询形成但未执行 {"queryString":"select * from \"risk_data_bcsd\" WHERE date between '2016-04-01' AND ' 2016-04-30' "}{"riskModules":[]}