我有一个函数可以查询 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 中解决的老问题。
旧的但实际的直到 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
...
给出正确的结果!