Php 无法使用send_long_data将Bigint数据存储到mysql数据库
在我的mysql数据库中,我需要存储非常大的id值。 因此,我将字段的类型设置为bigint(11) 当我尝试从php中准备好的mysqli语句在表中插入值时,所有值都被设置为Php 无法使用send_long_data将Bigint数据存储到mysql数据库,php,mysql,mysqli,Php,Mysql,Mysqli,在我的mysql数据库中,我需要存储非常大的id值。 因此,我将字段的类型设置为bigint(11) 当我尝试从php中准备好的mysqli语句在表中插入值时,所有值都被设置为2147483647,这是mysql中的最高整数值,即使字段的类型是bigint 例如: echo $id; $stmt_insert->bind_param("i", $id); $stmt_insert->execute; if( $stmt_insert === false ) { $Logge
2147483647
,这是mysql中的最高整数值,即使字段的类型是bigint
例如:
echo $id;
$stmt_insert->bind_param("i", $id);
$stmt_insert->execute;
if( $stmt_insert === false ) {
$Logger->error( mysqli_error($conn) );
}
让我输出2300679976
,但在数据库2147483647
中存储
然后,我阅读了bind_param
函数的文档,发现要存储大数据,必须使用send_long_data
函数。因此,我尝试了以下方法:
echo $id;
$stmt_insert->bind_param("b", null);
$stmt_insert->send_long_data(0, $id);
$stmt_insert->execute;
if( $stmt_insert === false ) {
$Logger->error( mysqli_error($conn) );
}
但这并没有解决问题。即使将表字段设置为bigint,仍会存储
2147483647
。由于32位系统上MySQL中的最大int大小为2147483647,因此必须更改数据类型。有几种方法可以解决这个问题
我刚刚发现问题确实出在mysql数据库中,类型设置不正确 我确实将其设置为bigint,但意外地将其固定为11,这是正常的int大小
我删除了固定大小,现在字段被正确设置为bigint(20),值也被正确存储。谢谢!更改了它您是否确定
$id
包含您认为的功能?请检查var\u dump($id)
。这就是为什么我像我说的那样做了回声,它给了我2300679976
。因此,$id
变量包含正确的值“类型设置不正确的地方。我将其设置为bigint,但意外地使用了固定大小11,这是正常的int大小”-我对此有一种感觉,没有问它设置为什么。在这件事上,我应该按照我的直觉去做。哈哈,很高兴看到你解决了这个问题@JakobAbfalter@JakobAbfalter我觉得你应该发布你自己的答案,而不是编辑,以供将来的访问者使用。我很乐意为它投票。BIGINT只有两种可能的(固定)大小,这取决于它是有符号的还是无符号的。括号中的数字没有任何有用的含义。您可能已经将该列定义为unsigned INT。您可以使用SQL模式来处理它,因此在类似这样的情况下可以获得错误消息,这也毫无价值。