布尔PHP MySQL参数错误

时间:2017-11-21 20:54:12

标签: php mysql

好吧,我已经在这工作了一段时间。似乎找不到问题。我已经通过Stackoverflow搜索了类似的问题,但他们似乎都指出了拼写错误的准备声明。

我在这里找不到任何拼写错误,但我仍然收到错误

  

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

TCP.LSTR

4 个答案:

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

http://php.net/manual/en/mysqli-stmt.error.php

答案 3 :(得分:-1)

变量$ stmt声明在if($ stmt = mysqli_prepare($ link,$ sql)){}语句中具有类型mysqli_stmt。在if语句之前声明$ stmt或在if语句中移动最后一行。