我正在尝试使用预准备语句进行更新,但它会不断更新错误的值(2147483647)。我无法弄清楚这个价值来自哪里。这是我的代码:
$myID = 5;
$loginTokenNew = time() * rand(3, 33) * $myID;
$_SESSION['loginToken'] = $loginTokenNew;
$mysqli = connectToDB();
$stmt = $mysqli->prepare('UPDATE users SET token=? WHERE id=?') or die('Couldn\'t update user token');
$stmt->bind_param('ii', $loginTokenNew, $myID);
$stmt->execute();
$stmt->close();
$mysqli->close();
奇怪的是会话变量采用正确的值,但数据库中的“标记字段”保持取值:2147483647
我准备好的陈述是否有问题,或者它与我的数据库有什么关系? 字段“token”是INT(255)字段btw。
答案 0 :(得分:4)
2147483647
是largest number签名的32位(4字节)INT
可以容纳的。
将字段更改为更大的类型,例如BIGINT
(如果数字始终为正数,则为BIGINT UNSIGNED
),或更改为字符串类型,例如VARCHAR
。