【发布时间】:2016-03-22 13:39:51
【问题描述】:
我遇到了通过 PDO 在 MySQL 上的 BIGINT 列中存储大整数的问题
如果我运行这个测试:
$number = "30123456789";
var_dump($number); //prints string(11) "30123456789"
$new_number = (int)$number;
var_dump($new_number); //prints int(30123456789)
到目前为止一切都很好......
如果我直接在 MySQL 中运行这个 SQL:
update my_table set bigint_field = 30123456789 where id_field = 1
一切正常...
当我尝试通过 PDO 保存该号码时出现问题,我将问题简化为这行代码:
//parameterized query
//update my_table set bigint_field = :bigint_field where id_field = :id_field
$statement->bindValue(":bigint_field", $new_number, PDO::PARAM_INT);
如果可选的第三个type 参数不存在或等于PDO::PARAM_STR,则该值被很好地保存,否则该值被截断为58685709。如果我尝试保存20288976024,则该值被截断为0。什么正在这里发生
我在 Debian Wheezy x64 上运行 PHP 5.5.33 和 MySQL 5.6.25
【问题讨论】:
-
我想到了一件事。你的 pdo 是基于 mysqlnd 的吗?
-
@YourCommonSense 我不确定,我怎么知道?
-
phpinfo(),pdo部分,应该有“mysqlnd”这个词。在仿真模式打开和关闭时比较结果也会很有趣
-
在 PDO 下:PDO 驱动程序 > mysql. pdo_mysql下:客户端API版本> 5.6.25
-
然后我建议安装 php-mysqlnd 或任何它为 Debian 调用的东西,然后再试一次。看到完整的可复制代码仍然被剪断会非常好。
标签: php mysql pdo biginteger