首页 > 解决方案 > PHP 警告:mysqli_stmt_bind_param():类型定义字符串中的元素数与绑定变量数不匹配

问题描述

我不断收到错误

警告: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");
}

标签: phpmysqli

解决方案


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

一般来说,你需要 3 个不同的东西来匹配这个调用:

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

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


推荐阅读