我遇到了这种非常讨厌的行为,我想知道我是做错了什么,或者这是故意的(如果是的话,为什么)。
每当我在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。
答案 0 :(得分:6)
这既不是故意的,也不是你做错了什么。这似乎是一个PHP错误。
根据this bug report,它已针对PHP 5.2.11进行了修复,但最近才针对5.3分支进行修复,因此您可能希望检查确切的PHP版本与那里提到的版本。