mysqli_stmt_close() expects parameter 1 to be mysqli_stmt, boolean(mysqli_stmt_close() 期望参数 1 是 mysqli_stmt,布尔值)
问题描述
这在大约 5 分钟前还在工作,但突然停止了.这是一个简单的登录表单,请看下面的代码
<!DOCTYPE html><html lang="zh-cn"><头><meta charset="UTF-8"><title>登录</title><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"><style type="text/css">正文{字体:14px sans-serif;}.wrapper{ 宽度:350px;填充:20px;}</风格>头部><身体><div class="wrapper"><h2>登录</h2><p>请填写您的登录凭据.</p><form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>"方法=发布"><div class="form-group <?php echo (!empty($username_err)) ? 'has-error' : ''; ?>"><label>用户名</label><input type="text" name="username" class="form-control" value="<?php echo $username; ?>"><span class="help-block"><?php echo $username_err;?></span><div class="form-group <?php echo (!empty($password_err)) ? 'has-error' : ''; ?>"><label>密码</label><input type="password" name="password" class="form-control"><span class="help-block"><?php echo $password_err;?></span>
<div class="form-group"><input type="submit" class="btn btn-primary" value="登录">
<p>还没有帐户?<a href="register.php">立即注册</a>.</p></表单>
我得到的错误是 Warning: mysqli_stmt_close() 期望参数 1 是 mysqli_stmt,布尔值在第 83 行的/opt/lampp/htdocs/magic/client/login.php 中给出
这在大约 5 分钟前还在工作,但突然停止了,不知道为什么.有什么想法吗?
当它工作时,它只是将用户重定向到welcome.php,现在它不是,并给我那个错误.代码取自 https://www.tutorialrepublic.com/php-tutorial/php-mysql-login-system.php
看看你在问什么:
if($stmt = mysqli_prepare($link, $sql)){//[...]}mysqli_stmt_close($stmt);
您总是尝试关闭您的语句,即使它没有成功创建.您需要移动该关闭尝试:
if($stmt = mysqli_prepare($link, $sql)){//[...]mysqli_stmt_close($stmt);}
此外,您首先收到此错误的事实意味着您的 SQL 查询未能准备好,因此其中存在某种错误.您目前没有检查这一点,如果您想找出为什么您的代码不起作用,这可能会让您感到困难.我建议为此添加一个检查:
if($stmt = mysqli_prepare($link, $sql)){//[...]mysqli_stmt_close($stmt);} 别的 {回声查询有问题:".mysqli_error($link);}
请注意,在生产代码中,您不想直接输出 mysqli_error()
,因为它可能会显示有关您的数据库的信息,而这些信息不是任何人的业务而是您的业务,因此请仅在此期间执行此操作你正在调试.
this was working about 5 minutes ago and has suddently stopped. It is a simple login form, please see code below
<?php
// Initialize the session
session_start();
// Check if the user is already logged in, if yes then redirect him to welcome page
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
header("location: welcome.php");
exit;
}
// Include config file
require_once "db/config.php";
// Define variables and initialize with empty values
$username = $password = "";
$username_err = $password_err = "";
// Processing form data when form is submitted
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 id, username, password FROM users WHERE username = ?";
if($stmt = mysqli_prepare($link, $sql)){
// Bind variables to the prepared statement as parameters
mysqli_stmt_bind_param($stmt, "s", $param_username);
// Set parameters
$param_username = $username;
// 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, $id, $username, $hashed_password);
if(mysqli_stmt_fetch($stmt)){
if(password_verify($password, $hashed_password)){
// Password is correct, so start a new session
session_start();
// Store data in session variables
$_SESSION["loggedin"] = true;
$_SESSION["id"] = $id;
$_SESSION["username"] = $username;
// Redirect user to welcome page
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);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
<style type="text/css">
body{ font: 14px sans-serif; }
.wrapper{ width: 350px; padding: 20px; }
</style>
</head>
<body>
<div class="wrapper">
<h2>Login</h2>
<p>Please fill in your credentials to login.</p>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div class="form-group <?php echo (!empty($username_err)) ? 'has-error' : ''; ?>">
<label>Username</label>
<input type="text" name="username" class="form-control" value="<?php echo $username; ?>">
<span class="help-block"><?php echo $username_err; ?></span>
</div>
<div class="form-group <?php echo (!empty($password_err)) ? 'has-error' : ''; ?>">
<label>Password</label>
<input type="password" name="password" class="form-control">
<span class="help-block"><?php echo $password_err; ?></span>
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary" value="Login">
</div>
<p>Don't have an account? <a href="register.php">Sign up now</a>.</p>
</form>
</div>
</body>
</html>
The error I get is Warning: mysqli_stmt_close() expects parameter 1 to be mysqli_stmt, boolean given in /opt/lampp/htdocs/magic/client/login.php on line 83
This was working about 5 minutes ago and has suddenly stopped and not sure why. Any ideas?
When it worked, it simply redirected the user to welcome.php and now it is not, and gives me that error. The code was taken of https://www.tutorialrepublic.com/php-tutorial/php-mysql-login-system.php
Look at what you're asking:
if($stmt = mysqli_prepare($link, $sql)){
// [...]
}
mysqli_stmt_close($stmt);
You always try to close your statement, even if it wasn't successfully created. You need to move that close attempt:
if($stmt = mysqli_prepare($link, $sql)){
// [...]
mysqli_stmt_close($stmt);
}
Additionally, the fact that you got this error in the first place means your SQL query failed to be prepared, so there's some kind of error in there. You are currently not checking for that, which can make life difficult for you if you want to figure out why your code isn't working. I recommend adding a check for that:
if($stmt = mysqli_prepare($link, $sql)){
// [...]
mysqli_stmt_close($stmt);
} else {
echo "Something's wrong with the query: " . mysqli_error($link);
}
Note that in production code, you don't want to output the mysqli_error()
directly since it may reveal information about your database that isn't anybody's business but yours, so only do this while you're debugging.
这篇关于mysqli_stmt_close() 期望参数 1 是 mysqli_stmt,布尔值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:mysqli_stmt_close() 期望参数 1 是 mysqli_stmt,布尔值
- 从 PHP 中的输入表单获取日期 2022-01-01
- SoapClient 设置自定义 HTTP Header 2021-01-01
- 正确分离 PHP 中的逻辑/样式 2021-01-01
- 没有作曲家的 PSR4 自动加载 2022-01-01
- Oracle 即时客户端 DYLD_LIBRARY_PATH 错误 2022-01-01
- 如何定位 php.ini 文件 (xampp) 2022-01-01
- Mod使用GET变量将子域重写为PHP 2021-01-01
- 带有通配符的 Laravel 验证器 2021-01-01
- PHP Count 布尔数组中真值的数量 2021-01-01
- Laravel 仓库 2022-01-01