微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 通过PDO将双重插入MySQL时精确丢失

我遇到了这种非常讨厌的行为,我想知道我是做错了什么,或者这是故意的(如果是这样,为什么).

每当我在PHP(5.3)中有一个double类型的变量并且我想在一个double类型的字段中将它插入到数据库(MysqL 5.0)中时,该值总是向下舍入到该点后面的6位数.我正在使用PDO.所以下面的代码

$stmt = $pdo->prepare("UPDATE soMetable SET someDouble = :somePHPDouble;");
$number = 0.11124379542256;
$stmt->bindValue(':somePHPDouble', $number);
$stmt->execute();

结果在0.111244中插入db.但是当我将变量转换为绑定表达式中的字符串(!)时:

$stmt->bindValue(':somePHPDouble', (string)$number);

它正确插入0.11124379542256.

这里发生了什么?我很无能为力. someDouble的MysqL数据类型确实是双重的,当通过MysqL控制台插入它时它才有效.而且PHP中的变量确实是双倍的,所以在我看来PDO内部出了问题.

提前致谢,
-CodePoet.

解决方法:

这既不是故意的,也不是你做错了什么.这似乎是一个PHP错误.

根据this bug report,它已针对PHP 5.2.11进行了修复,但最近才针对5.3分支进行修复,因此您可能需要检查您的确切PHP版本与那里提到的PHP版本.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐