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

Cod*_*oet 4 php mysql pdo

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

每当我在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();
Run Code Online (Sandbox Code Playgroud)

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

$stmt->bindValue(':somePHPDouble', (string)$number);
Run Code Online (Sandbox Code Playgroud)

它正确插入0.11124379542256.

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

在此先感谢-CodePoet.

Hen*_*pel 6

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

根据这个错误报告,它已针对PHP 5.2.11进行了修复,但最近才针对5.3分支进行修复,因此您可能希望根据那里提到的PHP版本检查确切的PHP版本.