绑定预处理语句参数时提示变量与参数数量不匹配的问题求助
问题解决:预处理语句参数数量不匹配错误
你的问题出在两次调用bind_param(),而非一次性绑定所有参数。SQL语句里有2个占位符?,但分开调用bind_param会导致参数绑定不完整,触发该错误。另外,代码里未从$_GET['token']获取$token变量,这也会导致后续绑定失败,需要补上。
修正后的代码:
if (!isset($_GET['token'])) { echo "<p class='passed'>Link passed.</p>"; } else { $stmt = $conn->prepare("UPDATE database SET is_verified = ? WHERE token = ?"); $status = 1; $token = $_GET['token']; // 补上获取token的代码 // 一次性绑定所有参数:第一个参数是类型字符串(i=int,s=string),顺序和SQL占位符对应 $stmt->bind_param("is", $status, $token); $res = $stmt->execute(); if ($res) { echo "<p class='NewsStat'>You confirmed.</p>"; } }
关键说明:
bind_param()的第一个参数是所有参数的类型标识字符串,比如这里"is"表示第一个参数是整数(对应$status),第二个是字符串(对应$token)。- 类型标识的顺序必须和SQL语句中
?的顺序完全对应,变量也要按顺序跟上。 - 必须确保
$token变量被正确赋值,否则即使绑定了也会出现参数缺失的问题。
内容的提问来源于stack exchange,提问作者Michaël Thönnissen
相关产品推荐
相关产品推荐

