Php PDO Firebird select sum 返回错误结果

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

我有一个函数可以查询 firebird 2.5 数据库以返回列的总和。

如果我在查询管理器中执行此选择,一切正常,但 php 代码的总结果是错误的。

例如,查询管理器的结果值为 1.205,55,php 代码的结果值为 699.785.495,12。

年份列的值是正确的,返回的行是正确的。

这是代码

     $db = getDB();
     $rows = array();

    $sth = $db->prepare("select Sum(D.total) as TOT, D.YEAR from DOCUMENTS D
                          where D.CUST = :custid 
                          GROUP BY D.YEAR ");  


    $custid = $request->getAttribute('custid');
    $sth->bindParam(':custid', $custid, PDO::PARAM_INT); 
    $sth->execute();
    $count = 0;
  
     while ($row = $sth->fetch (PDO::FETCH_OBJ)) {
                      
     $totval = array( 
                   'year' =>  $row->YEAR,  
                   'total ' => number_format($row->TOT, 2, ',', '.')
                    ); 
     

        array_push($rows, $totval);   
        $count++;
        }

我认为该错误可能与 firebird 的 dll 有关,但 php 版本是最新的(5.6.23)并且 firebird dll 已正确加载,没有任何错误消息。

我做了很多测试,但我无法修复它。

提前致谢!

更新2016年1月9日 此问题仅出现在“NUMERIC”类型的列上;对于“COMPUTED BY”列,不会发生错误。

已解决 02/09/16 我已将管理 firebird 数据库的组件从 PDO_FIREBIRD 更改为 Firebird/InterBase Functions ,一切正常。查询 NUMERIC 列的返回值是正确的。可能 PDO_firebird 使用方言 1 访问数据库,因为这是 PDO_firebird 中解决的老问题。

php select pdo sum firebird
1个回答
0
投票

旧的但实际的直到 2024 年和 Firebird 5。

我有一个名为 amount 的字段,类型为 numeric(8,2)

SELECT SUM(P.AMOUNT) FROM PAYMENTS P where
...总是给出 0.01

但是

SELECT SUM(cast(P.AMOUNT as numeric(8,2))) FROM PAYMENTS P where
... 给出正确的结果!

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