Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
布尔PHP MySQL参数错误_Php_Mysql - Fatal编程技术网

布尔PHP MySQL参数错误

布尔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

好的,我已经在这方面工作了一段时间。似乎找不到问题所在。我在Stackoverflow中搜索过类似的问题,但它们似乎都指向prepare语句中的拼写错误

我在这里没有发现任何打字错误,但我仍然得到了错误

警告:mysqli_stmt_close()要求参数1为mysqli_stmt,给定布尔值


在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.";
}