我的代码有问题吗?我试图显示结果但返回零,而是出现上面的标题,或者有什么办法可以顺利做到这一点。请让我知道。谢谢
$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]: PDOStatement->fetchAll(2) 上的一般错误
我相信
你正在使用绑定语法,这就是mysqli使用的语法。PDO只使用占位符,所以:consumer_id
应该?
。
如果您使用位置占位符(例如 ?
) 然后你可以像现在一样使用普通数组,但是如果你使用命名占位符(例如 :consumer_id
) 您必须使用如下关联数组:
$q->execute(array(":consumer_id" => $id));
否则,它不会知道哪个占位符必须替换为哪个值。
请让我知道如何调试这个
使用$q->debugDumpParams();
然后直接运行查询(Mysql termina/Mysql Workbench/phpmyAdmin或您想要的任何内容),看看是否得到与代码相同的结果
注意:我只是回答我通常如何测试我的代码与 PDO 的一些问题。这不是专门针对您的问题的解决方案。