布尔PHP MySQL参数错误
好的,我已经在这方面工作了一段时间。似乎找不到问题所在。我在Stackoverflow中搜索过类似的问题,但它们似乎都指向prepare语句中的拼写错误 我在这里没有发现任何打字错误,但我仍然得到了错误 警告:mysqli_stmt_close()要求参数1为mysqli_stmt,给定布尔值布尔PHP MySQL参数错误,php,mysql,Php,Mysql,好的,我已经在这方面工作了一段时间。似乎找不到问题所在。我在Stackoverflow中搜索过类似的问题,但它们似乎都指向prepare语句中的拼写错误 我在这里没有发现任何打字错误,但我仍然得到了错误 警告:mysqli_stmt_close()要求参数1为mysqli_stmt,给定布尔值 在70%的情况下,问题在于您的查询。Mysql之所以给您一个错误是因为这($stmt=mysqli\u prepare($link,$sql)出现错误,并且mysqli\u prepare方法返回一个bo
在70%的情况下,问题在于您的查询。Mysql之所以给您一个错误是因为这
($stmt=mysqli\u prepare($link,$sql)
出现错误,并且mysqli\u prepare
方法返回一个bool
。应该是您的查询,将?
作为一个值。尝试将它们替换为null
。告诉我它是否有效。变量$stmt被声明为在if($stmt=mysqli\u prepare($link,$sql)){}中具有mysqli\u stmt类型语句。在if语句之前声明$stmt,或将最后一行移到if语句中
if($stmt = mysqli_prepare($link, $sql)){
...
}
这和
$stmt = mysqli_prepare($link, $sql);
if($stmt){
...
}
因此,在您的例子中,最后一行的失败意味着mysqli\u prepare($link,$sql)
的结果是(布尔值)false
。由于最后一行在if
之外,它将尝试关闭false
而不是准备好的查询。将其放入if
语句中,将解决错误,但不会解决结果为false
的原因
if($stmt = mysqli_prepare($link, $sql)){
...
mysqli_stmt_close($stmt);
}
现在由于某种原因,mysqli\u 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);
}
使用此代码检查上一个语句错误:
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.";
}
将最后一行放在ifNote中:mysqli的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql\u查询接口混淆。在您对过程风格投入过多之前,值得切换。例如:
$db=新的mysqli(…)
和$db->prepare(“…”)
过程接口是PHP 4时代的产物,当时引入了mysqli
API,不应在新代码中使用。不,将“?”替换为“null”并不能修复错误
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.";
}