【问题标题】:PHP Warning: mysqli_stmt_bind_param(): Number of elements in type definition string doesn't match number of bind variables [duplicate]PHP警告:mysqli_stmt_bind_param():类型定义字符串中的元素数与绑定变量数不匹配[重复]
【发布时间】:2020-10-20 01:12:37
【问题描述】:

我不断收到错误

警告:mysqli_stmt_bind_param():类型定义字符串中的元素数与绑定变量数不匹配

  $sql = "INSERT INTO users (usersName, usersEmail, usersUid, usersPwd) VALUES (?, ?, ?, ?);";
  $stmt = mysqli_stmt_init($conn);
  if (!mysqli_stmt_prepare($stmt, $sql)) {
    header("location: ../signup.php?error=stmtfailed");
    exit();
  }
  $hashedPwd = password_hash($pwd, PASSWORD_DEFAULT);

mysqli_stmt_bind_param($stmt, "sssss", $name, $email, $username, $pwd, $hashedPwd);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
header("loctaion: ../signup.php?error=none");
}

【问题讨论】:

  • 我从来没有看到你分配给$name$email$username$pwd,这让我想知道你是如何得到$hashedPwd 的,但尽管如此,我们没有看到变量赋值。
  • 您将 5 个变量分配给 4 个占位符。我认为您需要从那里删除 $pwd
  • @Dharman for the code present the error 我相信应该不同,“没有为准备好的语句提供数据”。清楚地表示代码与错误消息不匹配

标签: php mysqli


【解决方案1】:

mysqli_stmt_bind_param() 的签名是mysqli_stmt_bind_param(mysqli_stmt $stmt, string $types, mixed &$var1 [, mixed &$... ])

通常,您需要在此调用中匹配 3 个不同的东西:

  • SQL 语句中? 的数量($sql 中有 4 个)
  • $types 变量上的字符数(s 有 5 个字符)
  • 在前 2 个参数之后传递的变量数(你有 5 个:$name, $email, $username, $pwd, $hashedPwd

基于此,您要么必须向 SQL 查询添加新参数,要么需要删除传递给语句的变量之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    相关资源
    最近更新 更多