好吧,我已经为这个工作了一段时间了。似乎找不到这个问题。我已经搜索过Stackoverflow中类似的问题,但它们似乎都指向了准备输入的语句。
我在这里没有发现任何排字,但我仍然会发现错误
警告: mysqli_stmt_close()期望参数1为mysqli_stmt,布尔给定
$sql = "INSERT INTO users (email, password, firstname, lastname, date, position, department, manager, birthdate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
if($stmt = mysqli_prepare($link, $sql)){
mysqli_stmt_bind_param($stmt, "sssssssss", $param_email, $param_password, $param_firstname, $param_lastname, $param_department, $param_position, $param_manager, $param_date, $param_birthdate);
$param_email = $email;
$param_password = password_hash($password, PASSWORD_DEFAULT);
$param_firstname = $firstname;
$param_lastname = $lastname;
$param_department = $department;
$param_position = $position;
$param_manager = $manager;
$param_date = $date;
$param_birthdate = $birthdate;
if(mysqli_stmt_execute($stmt)){
// Redirect to login page
header("location: index.php");
} else{
echo "Something went wrong. Please try again later.";
}
}
mysqli_stmt_close($stmt);发布于 2017-11-21 21:12:45
if($stmt = mysqli_prepare($link, $sql)){
...
}这和
$stmt = mysqli_prepare($link, $sql);
if($stmt){
...
}因此,在您的例子中,最后一行的失败意味着mysqli_prepare($link, $sql)的结果是一个(boolean) false。因为您在if之外有最后一行,所以它将尝试关闭一个false,而不是一个准备好的查询。将其放入if语句中,将解决您的错误,但结果不是false。
if($stmt = mysqli_prepare($link, $sql)){
...
mysqli_stmt_close($stmt);
}现在,由于某种原因,mysqli_prepare失败了。这可能是因为$link或$sql。$sql是给出的,看起来还不错,所以$link一定是失败了。
$link = mysqli_connect("localhost", "user", "password", "db");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
if($stmt = mysqli_prepare($link, $sql)){
...
mysqli_stmt_close($stmt);
}发布于 2017-11-21 21:02:46
在70%的情况下,问题在您的查询中。Mysql给出错误的原因是这个($stmt = mysqli_prepare($link, $sql)有一个错误,而mysqli_prepare方法正在返回一个bool。它应该是以?作为值的查询。尝试用null替换它们。告诉我它是否有效。
发布于 2017-11-21 21:30:17
使用此代码检查最后一条语句错误:
if(mysqli_stmt_execute($stmt)){
// Redirect to login page
header("location: index.php");
} else{
printf("Error: %s.\n", mysqli_stmt_error($stmt));
echo "Something went wrong. Please try again later.";
}https://stackoverflow.com/questions/47422533
复制相似问题