好吧,我已经在这工作了一段时间。似乎找不到问题。我已经通过Stackoverflow搜索了类似的问题,但他们似乎都指出了拼写错误的准备声明。
我在这里找不到任何拼写错误,但我仍然收到错误
警告:mysqli_stmt_close()要求参数1为mysqli_stmt,给定布尔值
TCP.LSTR
答案 0 :(得分:2)
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);
}
答案 1 :(得分:0)
在70%的情况下,问题出在您的查询中。 Mysql给你一个错误的原因是因为($stmt = mysqli_prepare($link, $sql)
有错误而mysqli_prepare
方法返回bool
。它应该是您的?
作为值的查询。尝试用null
替换它们。告诉我它是否有效。
答案 2 :(得分:0)
使用此代码检查上次语句错误:
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.";
}
答案 3 :(得分:-1)
变量$ stmt声明在if($ stmt = mysqli_prepare($ link,$ sql)){}语句中具有类型mysqli_stmt。在if语句之前声明$ stmt或在if语句中移动最后一行。