首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >布尔型PHP MySQL参数误差

问布尔型PHP MySQL参数误差
EN

Stack Overflow用户
提问于 2017-11-21 20:54:12
回答 4查看 223关注 0票数 0

好吧,我已经为这个工作了一段时间了。似乎找不到这个问题。我已经搜索过Stackoverflow中类似的问题,但它们似乎都指向了准备输入的语句。

我在这里没有发现任何排字,但我仍然会发现错误

警告: mysqli_stmt_close()期望参数1为mysqli_stmt,布尔给定

代码语言:javascript
复制
$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);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-11-21 21:12:45

代码语言:javascript
复制
if($stmt = mysqli_prepare($link, $sql)){
  ...
}

这和

代码语言:javascript
复制
$stmt = mysqli_prepare($link, $sql);
if($stmt){
  ...
}

因此,在您的例子中,最后一行的失败意味着mysqli_prepare($link, $sql)的结果是一个(boolean) false。因为您在if之外有最后一行,所以它将尝试关闭一个false,而不是一个准备好的查询。将其放入if语句中,将解决您的错误,但结果不是false。

代码语言:javascript
复制
if($stmt = mysqli_prepare($link, $sql)){
  ...
  mysqli_stmt_close($stmt);
}

现在,由于某种原因,mysqli_prepare失败了。这可能是因为$link或$sql。$sql是给出的,看起来还不错,所以$link一定是失败了。

代码语言:javascript
复制
$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);
}
票数 2
EN

Stack Overflow用户

发布于 2017-11-21 21:02:46

在70%的情况下,问题在您的查询中。Mysql给出错误的原因是这个($stmt = mysqli_prepare($link, $sql)有一个错误,而mysqli_prepare方法正在返回一个bool。它应该是以?作为值的查询。尝试用null替换它们。告诉我它是否有效。

票数 0
EN

Stack Overflow用户

发布于 2017-11-21 21:30:17

使用此代码检查最后一条语句错误:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47422533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档