如何删除此 mysqli 警告


How to remove this mysqli warning?

我正在我的php/mysqli中进行更新。更新工作正常,但我遇到的问题是我不断收到此警告:

警告:mysqli_stmt::fetch() [mysqli-stmt.fetch]:(HY000/2053):尝试读取一行,而没有与第 44 行中的语句关联的结果集。

因为我不断收到此警告,这意味着在用户提交表单后,即使输入了正确的用户名,它仍然会显示消息"您输入的用户名无效。尝试再次输入",而实际上它应该将用户导航到"谢谢.php页面。

所以我的问题是如何删除此警告?

 $username = (isset($_POST['username'])) ? $_POST['username'] : '';
      $newpassword = (isset($_POST['newpassword'])) ? $_POST['newpassword'] : '';
      $loggedIn = false;
      if (isset($_POST['submit'])) {
        // don't use $mysqli->prepare here
        $query = "UPDATE Teacher SET TeacherSalt = ?, TeacherPassword = SHA1(CONCAT(?,?)) WHERE TeacherUsername = ? LIMIT 1";
        // prepare query
        $stmt=$mysqli->prepare($query);
        // You only need to call bind_param once
        $stmt->bind_param("ssss",$salt,$newpassword,$salt,$username);
        // execute query
//bind results
$stmt->bind_result($dbTeacherUsername,$dbTeacherPassword,$dbTeacherSalt);
        $stmt->execute(); 
        while($stmt->fetch()) {
          if ($username == $dbTeacherUsername) {
            $loggedIn = true;
          }
        }
        /* close statement */
        $stmt->close();
        /* close connection */
        $mysqli->close();
        if ($loggedIn == true){
          $_SESSION['username'] = $dbTeacherUsername;
          header( 'Location: thankyou.php' ) ;
          die();
        }
      }
     if ($loggedIn == false && $_POST) {
        echo "The Username you Entered is not Valid. Try Entering it Again.";
        }
      ?>

更改

$stmt->execute(); 
        while($stmt->fetch()) {
          if ($username == $dbTeacherUsername) {
            $loggedIn = true;
          }
        }

    if($stmt->execute()) {
      if ($username == $dbTeacherUsername) {
        $loggedIn = true;
      }
    }

UPDATE语句不会产生结果集。引用文档:

如果语句为 UPDATE、DELETEINSERT,则可以使用 mysqli_stmt_affected_rows() 函数确定受影响的行总数。同样,如果查询生成结果集,则使用 mysqli_stmt_fetch() 函数。

您可以在 PHP 中删除"警告信息",您只需替换即可在 php 中.ini

error_reporting  =  E_ALL & ~E_NOTICE

error_reporting  =  0

但是如果你的代码是完美的,警告信息不会出现,必须的不要出现在 PHP 中的警告,是为了解决警告消息问题

在您的代码中,您在第 44 行之前遇到了问题。用你的"同时循环"看...

编辑:我只是读了你的答案+ 1 丹博士

您可以通过更改脚本顶部的 error_reporting() 函数来删除 PHP 上的任何警告。放:

error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);

这是所有错误,除了警告或通知。或者,如果它只是一个函数,则可以在函数调用前面加上 at 符号:

while (@$stmt->fetch()) {
    //do stuff
}

例如。