我正在尝试为图表创建一个聚合数据集(每X行的最小值和最大值),但我没有得到我期望的结果。我可以从PHPMyAdmin运行查询,它工作得很好,我得到一个有两列的行。但是,当我使用PDO时,它只会产生false
而不是我期望的数组。
// Get an min/max aggregated dataset
$aggregatedData = [];
echo (string)$count . "<br>"; // DEBUG
$query = "SELECT MIN(channel1) AS MinVal, MAX(channel1) AS MaxVal FROM "
. "(SELECT channel1 FROM datacache WHERE fileId = ? ORDER BY time LIMIT ?,?) subset";
$sql = $conn->prepare($query);
while ($offset < $count)
{
$sql->execute([$chart, $offset, $aggregate]);
echo $chart . ", " . $offset . ", " . $aggregate . "<br>"; // DEBUG
$data = $sql->fetch(PDO::FETCH_ASSOC);
echo json_encode($data)."<br>"; // DEBUG
array_push($aggregatedData, $data["MinVal"], $data["MaxVal"]);
$offset += $aggregate;
}
echo json_encode($aggregatedData); //AJAX Export
我的调试输出如下(简要摘录)
1000004
37, 0, 50
false
37, 50, 50
false
37, 100, 50
false
37, 150, 50
false
37, 200, 50
false
注意:这不像建议的那样重复。
答案 0 :(得分:2)
PDOStatement::execute()
将所有数组值视为字符串PDO::PARAM_STR
,而LIMIT ?,?
值不需要为整数PDO::PARAM_INT
。
您可能需要使用PDOStatement::bindParam()
代替PDO::PARAM_INT
。
此外,您可以在循环外执行此操作一次,因为变量由引用绑定:
$sql->bindParam(1, $chart, PDO::PARAM_INT); // or whatever it is
$sql->bindParam(2, $offset, PDO::PARAM_INT);
$sql->bindParam(3, $aggregate, PDO::PARAM_INT);
while ($offset < $count)
{
$sql->execute();
$data = $sql->fetch(PDO::FETCH_ASSOC);
array_push($aggregatedData, $data["MinVal"], $data["MaxVal"]);
$offset += $aggregate;
}