SQLSTATE[HY000]: PDOStatement->fetchAll(2) 上的一般错误


SQLSTATE[HY000]: General error on PDOStatement->fetchAll(2)

我的代码有问题吗?我试图显示结果但返回零,而是出现上面的标题,或者有什么办法可以顺利做到这一点。请让我知道。谢谢

    $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 的一些问题。这不是专门针对您的问题的解决方案。