我在使用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。