我遇到了这个非常恼人的行为,我想知道我是否做错了什么,或者如果这是故意的(如果是这样,为什么)。通过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数据类型实际上是一个double类型,当它通过mysql控制台插入时它就可以工作。而在PHP中的变量真的是一个双重的,所以在我看来,PDO内出现问题。
在此先感谢, -CodePoet。
您是否尝试明确指定PDO :: PARAM_FLOAT?像: '$ stmt-> bindValue(':somePHPDouble',$ number,PDO :: PARAM_FLOAT);' – intgr 2009-11-15 17:22:44
PDO没有指定一个名为PARAM_FLOAT的常量。据了解,当客户端代码省略最终参数时,表明该参数将被视为浮点数: http://www.php.net/manual/en/pdo.constants.php – CodePoet 2009-11-17 18:41:47