<?php require_once 'connect.php';
$username = $password = "";
$username_err = $password_err = "";
if($_SERVER["REQUEST_METHOD"] == "POST"){
// Check if username is empty
if(empty(trim($_POST["username"]))){
$username_err = 'Please enter username.';
} else{
$username = trim($_POST["username"]);
}
// Check if password is empty
if(empty(trim($_POST['password']))){
$password_err = 'Please enter your password.';
} else{
$password = trim($_POST['password']);
}
// Validate credentials
if(empty($username_err) && empty($password_err)){
// Prepare a select statement
$sql = "SELECT username,password FROM users WHERE username = '".$_POST['username']."'";
if($stmt = mysqli_prepare($link, $sql)){
// Bind variables to the prepared statement as parameters
33. mysqli_stmt_bind_param($stmt, "s", $param_username);
// Set parameters
$param_username = $username;
//$param_password = password_hash($password, PASSWORD_DEFAULT);
// Attempt to execute the prepared statement
if(mysqli_stmt_execute($stmt)){
// Store result
mysqli_stmt_store_result($stmt);
// Check if username exists, if yes then verify password
if(mysqli_stmt_num_rows($stmt) == 1){
// Bind result variables
mysqli_stmt_bind_result($stmt, $username, $hashed_password);
if(mysqli_stmt_fetch($stmt)){
if(password_verify($password, $hashed_password)){
/* Password is correct, so start a new session and
save the username to the session */
session_start();
$_SESSION['username'] = $username;
header("location: welcome.php");
} else{
// Display an error message if password is not valid
$password_err = 'The password you entered was not valid.';
}
}
} else{
// Display an error message if username doesn't exist
$username_err = 'No account found with that username.';
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// Close statement
//mysqli_stmt_close($stmt);
}
// Close connection
mysqli_close($link);
}
?>
使用mysqli_stmt_bind_param()
时,查询中需要有?
占位符,这些占位符将被参数替换。这样做而不是将变量直接连接到查询字符串中。
该错误表示mysqli_stmt_bind_param()
调用中的参数数与SQL中?
的参数数不匹配。
因此,从$sql
中取出变量,并将?
放在那里。
$sql = "SELECT username,password FROM users WHERE username = ?";
我在prepare语句和bind_param中有正确的数字(7),所以我不知道为什么会发生这种情况。
我正在使用编写我认为是相当基本的准备好的状态。语句如下所示(其中是实例): 这将失败,在中的参数数不匹配。
我得到这个错误:
首先,我知道这是一个重复的问题,我问的是同样的问题。但是我已经阅读了所有与相同问题相关联的解决方案,但是当我遵循建议的解决方案时,它将触发更多的警告出现。这就是我的代码 获取 只为得到这些警告; 警告:mysqli_stmt::bind_param():第119行C:\xampp\htdocs\gsd\emergency\records.php中的变量数与准备好的语句中的参数数不匹配 警告:mys
问题内容: 我一直在尝试使用准备好的语句在PHP中编写登录表单,但是每次尝试登录时,都会出现以下错误: mysqli_stmt :: bind_result():绑定变量的数量与准备好的语句中的字段数量不匹配 这是我的代码: 有人可以告诉我为什么会这样吗? 问题答案: 如果这确实是您的代码,则可能是$ _POST [“ name”]或$ _POST [“ password”]是一个数组,因此bin
我在准备好的语句(mysqli)上遇到了麻烦,我正在进行连接,一切都是正确的,直到我试图绑定参数,问题是,我试图绑定63个值,我检查了很多次我有正确的值,因为我找不到导致错误的错误: 以下是我的代码: 希望有人能解释我在这里失败了什么!