SQLSTATE [HY000] для переменной pdo SET - PullRequest
0 голосов
/ 25 мая 2019

У меня есть проблема с получением кумулятивной суммы за месяц с PDO / MySQL, php 7.0 и mysql 5.5.

С несколькими запросами я получил " Превышение: SQLSTATE [HY000]: Общая ошибка VAR " как ошибка. Если я удаляю эти строки «SET», они исчезают, но я не могу получить то, что пытаюсь сделать.

$sql = "
SET @accInc := 0;
SET @accOut := 0;
SELECT
q1.y as year,
q1.m as month,
(@accInc := @accInc + q1.income) AS accInc,
(@accOut := @accOut + q1.outgo) AS outInc
FROM
    (SELECT
    YEAR(`date`) AS y,
    MONTH(`date`) AS m,
    SUM(CASE WHEN amount > 0 THEN amount ELSE 0 END) as income,
    SUM(CASE WHEN amount < 0 THEN amount ELSE 0 END) as outgo
    FROM `transaction`
    GROUP BY y, m
    ORDER BY y, m
    ) AS q1";
require("./pdo.php");
try {
    $req = $db->prepare($sql);
    $req->execute();
    $data = $req->fetchAll(PDO::FETCH_ASSOC);
    foreach($data as $row) {
        $acc[$row["year"]][$row["month"]] = array(
            "inc" => (float)$row["accInt"],
            "out" => (float)$row["accOut"]
        );
    }
} catch(PDOException $except) {
    printf("Excention : %s", $except->getMessage());
}

Спасибо.

Редактировать : Я должен был установить $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); И изолировать SET команду. Теперь это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...