我的代码有什么问题吗?我试图显示结果,但返回零,而不是上面的标题出现或有任何方法如何顺利得到这个。请告诉我。感谢
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION, 1);
$sql = (" SET @curRank1 = 0;
SET @curRank2 = 0;
SELECT
D1.reading_date
,D1.consumer_id
,D1.readings AS previous
,D2.readings AS current
,(D2.readings - D1.readings) AS kwh_used
FROM
(
SELECT M1.*, @curRank1 := @curRank1 + 1 AS rank
FROM consumption M1
LEFT JOIN consumption M2
ON Date(M1.reading_date) = Date(M2.reading_date)
AND M1.reading_date > M2.reading_date
WHERE M2.reading_date IS NULL
) D2
LEFT JOIN
(
SELECT M1.*, @curRank2 := @curRank2 + 1 AS rank
FROM consumption M1
LEFT JOIN consumption M2
ON Date(M1.reading_date) = Date(M2.reading_date)
AND M1.reading_date > M2.reading_date
WHERE M2.reading_date IS NULL
) D1
ON D2.rank = (D1.rank + 1)
WHERE D1.reading_date IS NOT NULL
AND D1.consumer_id = :consumer_id");
$q = $pdo->prepare($sql);
$q->execute(array($id));
$q->nextRowset();
$data = $q->fetchAll(PDO::FETCH_ASSOC);
编辑:SQLSTATE [HY000]:一般错误onPDOStatement-> fetchAll(2)
答案 0 :(得分:1)
我相信你正在使用绑定语法,这是mysqli使用的。 PDO只使用占位符,因此:consumer_id
应为?
。
答案 1 :(得分:1)
如果使用位置占位符(例如?
)那么您可以像现在一样使用普通数组,但如果使用命名占位符(例如:consumer_id
)则必须使用关联数组像这样:
$q->execute(array(":consumer_id" => $id));
否则,它不知道哪个占位符必须替换为哪个值。
答案 2 :(得分:0)
请让我知道如何调试
使用$q->debugDumpParams();
然后直接运行查询(Mysql termina / Mysql Workbench / phpmyAdmin或者你想要的),看看你是否得到与你的代码相同的结果
注意:我只是回答我通常如何测试我的代码与PDO的一些问题。这不是特定问题的解决方案。