我有一个查询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正确加载而没有任何错误消息。
我做了很多测试,但我无法修复它。
提前致谢!
更新01/09/16 只有“NUMERIC”类型的列才会出现此问题;使用“COMPUTED BY”列不会发生错误。
已解决02/09/16 我已经将组件更改为从PDO_FIREBIRD到Firebird/InterBase Functions管理firebird数据库,一切正常。从NUMERIC列的查询返回的值是正确的。可能PDO_firebird使用方言1访问数据库,因为这是解决PDO_firebird的旧问题。