使用PDO、PHP和;赛贝斯

使用PDO、PHP和;赛贝斯,php,pdo,sybase,Php,Pdo,Sybase,我有一个类似下面的问题。我从PDO/PHP中得到的结果与在服务器上的交互式SQL提示符中得到的结果不同。通过交互式SQL运行此查询时,我正确地看到了交易金额(即45.34) 当我通过PDO提取结果时,我看到错误的结果和错误增加的精度(即45.3400000000001)。PDO中是否有可以设置为返回存储在数据库中的数据的内容 Select tl.ID , tl.Transaction_Amount from transactionLog tl 更新:查询返回的数据正在格式化为js

我有一个类似下面的问题。我从PDO/PHP中得到的结果与在服务器上的交互式SQL提示符中得到的结果不同。通过交互式SQL运行此查询时,我正确地看到了交易金额(即45.34)

当我通过PDO提取结果时,我看到错误的结果和错误增加的精度(即45.3400000000001)。PDO中是否有可以设置为返回存储在数据库中的数据的内容

Select tl.ID
       , tl.Transaction_Amount
from transactionLog tl
更新:查询返回的数据正在格式化为json。我已经验证了前json数据也包含假数据。antoox的一个回答建议在查询中以db级别取整。不幸的是,这并没有帮助,因为当在SQL提示符下运行时,查询返回正确的数据,并且一旦通过PDO,取整或不取整将不正确地显示。antoox也提到了PHP bug#53632。不幸的是,这个bug并不是我们环境中的一个因素,因为我们使用的是更新的版本


更新:根据Sybase Central的报告,数据库字段的大小为10,比例为2。

几个版本的PHP都有一个

您可以执行如下查询:

SELECT tl.ID, round(tl.Transaction_Amount, 2) FROM transactionLog tl

,或更新您的php版本。

我们最终通过使用类似的想法来“解决”这个问题,虽然这并不理想,但性能足够好,在本用例中是可以接受的。

感谢antoox的建议。不幸的是,我们远远超出了这个bug中列出的版本,并且url中列出的测试脚本通过了。此外,由于数据似乎正确地来自Sybase,所以在数据库级别取整没有任何帮助,因为问题似乎发生在PDO级别。由于您的答案在技术上是解决其他有此问题的可能的解决方案,因此我将向您提供此答案,即使它在技术上不是我的特定问题的解决方案。谢谢antoox。我添加了此信息的更新。数字大小为10,刻度为2。谢谢