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

时间:2015-03-13 02:28:05

标签: php mysql pdo mysqli

我的代码有什么问题吗?我试图显示结果,但返回零,而不是上面的标题出现或有任何方法如何顺利得到这个。请告诉我。感谢

    $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)

3 个答案:

答案 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的一些问题。这不是特定问题的解决方案。