【问题标题】:php prepared statement Update - sets wrong value [duplicate]php准备好的语句更新-设置错误的值[重复]
【发布时间】:2025-12-20 03:20:43
【问题描述】:

我正在尝试使用准备好的语句进行更新,但它不断更新错误的值 (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) 字段。

【问题讨论】:

  • 是的,我有 session_start()。我页面上的会话运行良好.. 只是数据库令牌设置为错误值
  • 好的。看起来下面的Sverri's answer 是有道理的。

标签: php mysqli prepared-statement


【解决方案1】:

2147483647largest number 一个有符号的 32 位(4 字节)INT 可以容纳。

将字段更改为更大的类型,例如BIGINT(或BIGINT UNSIGNED,如果数字始终为正数),或更改为字符串类型,例如VARCHAR

【讨论】:

  • 当然!非常感谢:)