绑定后,变量不会从mysqli语句中输出。

问题描述 投票:0回答:1

我试图从我的数据库中选择一些东西,并对它们进行呼应。由于某些原因,我唯一能呼应的是电子邮件。id和用户名没有显示出来。我没有得到任何错误,他们只是没有出现。

 $sql = "SELECT id, email, username FROM users WHERE email = ?";
    if ($stmt = mysqli_prepare($link, $sql)) {
      mysqli_stmt_bind_param($stmt, "s", $param_email);
      $param_email = $email;
      if (mysqli_stmt_execute($stmt)) {
        mysqli_stmt_store_result($stmt);
        if (mysqli_stmt_num_rows($stmt) == 1) {
          mysqli_stmt_bind_result($stmt, $id, $email, $username);
          $error = 0;
          $to = $email;
          echo "id:".$id;
          echo $username;
          echo $email;
        } else {
         //some stuff
        }
      } else {
        $error = 1;
      }
    }

我错过了什么?

php mysqli
1个回答
2
投票

为什么你看不到从数据库中获取的任何值,是因为你忘记了调用 fetch() 之后 bind_result().

但是,你把事情搞得太复杂了。你不需要这么多 if 语句,你不应该使用 bind_result() 如果你有多个列。这将变得非常混乱。使用 get_result() 来获取结果,然后获取你所需要的单条记录(假设电子邮件是唯一的,并且你的SELECT返回0或1条记录)。

$stmt = $link->prepare("SELECT id, email, username FROM users WHERE email = ?");
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result()->fetch_assoc();

if ($result) {
    $error = 0;
    $to = $result['email'];
    echo "id:".$result['id'];
    echo $result['username'];
    echo $result['email'];
} else {
    $error = 1;
}

没有必要使用 mysqli_stmt_num_rows. 数据本身会告诉你是否有东西被返回。这也保护了你在使用非缓冲查询时不会出现类似的问题。很容易不小心漏掉 mysqli_stmt_store_result().

永远不要检查 mysqli_stmt_execute()mysqli_prepare(). 这是一个可怕的和混乱的做法。确保你已经开启了错误报告功能。请看 如何在MySQLi中获取错误信息?

© www.soinside.com 2019 - 2024. All rights reserved.