【发布时间】:2009-11-15 16:52:41
【问题描述】:
我遇到了这种非常烦人的行为,我想知道我做错了什么,或者这是故意的(如果是,为什么)。
每当我在 php (5.3) 中有一个 double 类型的变量并且我想将它插入到数据库 (MYSQL 5.0) 的一个 double 类型的字段中时,该值总是被四舍五入到后面的 6 位数字当我使用 PDO 时。所以下面的代码:
$stmt = $pdo->prepare("UPDATE someTable SET someDouble = :somePHPDouble;");
$number = 0.11124379542256;
$stmt->bindValue(':somePHPDouble', $number);
$stmt->execute();
结果 0.111244 插入到数据库中。但是当我将变量转换为绑定表达式中的字符串(!)时,例如:
$stmt->bindValue(':somePHPDouble', (string)$number);
它将正确插入为 0.11124379542256。
这里发生了什么?我一无所知。 someDouble 的 MySQL 数据类型确实是一个 double,当通过 mysql 控制台插入它时它就可以工作。而且php中的变量确实是double,所以在我看来PDO内部出了点问题。
提前致谢, -CodePoet。
【问题讨论】:
-
您是否尝试过明确指定 PDO::PARAM_FLOAT?喜欢:
$stmt->bindValue(':somePHPDouble', $number, PDO::PARAM_FLOAT); -
PDO 未指定名为 PARAM_FLOAT 的常量。据了解,当客户端代码省略最后一个参数时,表示该参数将被视为浮点数:php.net/manual/en/pdo.constants.php