语法错误或访问冲突:1064 您的 SQL 语法有错误;使用 JSON_TABLE [Symfony] 时

问题描述 投票:0回答:1

我在 symfony 上创建了一个自定义存储库查询来计算价格。这是查询:


       $sql = " SELECT
                   SUM(sub.totalPriceWT) AS totalPrice,
                   c.label
               FROM (
                   SELECT
                       v.id,
                       (
                           SELECT SUM(priceWT)
                           FROM JSON_TABLE(
                               JSON_UNQUOTE(JSON_EXTRACT(v.dac, '$.bdc.service.operator.entries[*].priceWT')),
                               '$[*]' COLUMNS(priceWT DECIMAL(10, 2) PATH '$')
                           ) der
                       ) AS totalPriceWT
                   FROM valid v
                   JOIN sheet s ON v.sheet_id = s.id
                   JOIN step st ON s.step_id  = st.id
                   WHERE JSON_UNQUOTE(JSON_EXTRACT(v.dac, '$.type')) = 'bdc'
                       AND (
                           (YEAR(s.sent_date) = :currentYear AND CAST(JSON_EXTRACT(v.dac, '$.anticipated') AS SIGNED) = :anticipated2)
                           OR
                           (YEAR(s.sent_date) = :previousYear AND CAST(JSON_EXTRACT(v.dac, '$.anticipated') AS SIGNED) = :anticipated1)
                       )
                       AND s.perimeter_id = :perimeter
                       AND JSON_UNQUOTE(JSON_EXTRACT(v.dac, '$.bdc.service.operator.entries')) IS NOT NULL
                       AND st.slug != 'rejetee'
               ) AS sub
               JOIN valid v2 ON sub.id = v2.id
               JOIN sheet s2 ON v2.sheet_id = s2.id
               JOIN cost_center c ON s2.cost_center_id = c.id
               GROUP BY c.id
               ";
      
       $conn = $this->manager->getConnection();
       $stmt = $conn->prepare($sql);
       $stmt->bindValue('perimeter', $perimeter->getId());
       $stmt->bindValue('currentYear', $year);
       $stmt->bindValue('previousYear', $year - 1);
       $stmt->bindValue('anticipated1', 1);
       $stmt->bindValue('anticipated2', 0);
       $resultSet = $stmt->executeQuery();
       $resultBDC = $resultSet->fetchAllAssociative();

问题是我遇到了这种错误:

执行查询时发生异常:SQLSTATE[42000]:语法 错误或访问冲突:1064 您的 SQL 语法有错误; 检查与您的 MariaDB 服务器版本对应的手册 在 '( JSON_UNQUOTE(JSON_EXTRACT(v.dac, 第 9 行的“$.bdc.serv...”

我似乎找不到我的语法有任何问题。我想这可能是服务器问题,因为奇怪的是错误显示 “检查与您的 MariaDB 服务器相对应的手册”,但我以为我在 MySQL 上。

编辑:我在 MariaDB 上。

我输入以下命令:

php bin/console debug:container --env-vars
php bin/console debug:config doctrine dbal

输出显示我确实在 mySQL /pdo_mySQL 上。

我不明白问题出在哪里。

php symfony pdo mariadb doctrine
1个回答
0
投票

来自 https://mariadb.com/kb/en/json_table/

MariaDB 10.6.0 中添加了 JSON_TABLE。

MariaDB 中并非所有 JSON 功能都被植入,有些功能只是较晚才实现。

© www.soinside.com 2019 - 2024. All rights reserved.