0

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

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

因为我不断收到此警告,这意味着用户提交表单后,即使输入了正确的用户名,它仍然显示消息“您输入的用户名无效。请尝试再次输入。” 当它真的应该将用户导航到thankyou.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.";
        }
      ?>
4

4 回答 4

1

改变

$stmt->execute(); 

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

    if($stmt->execute()) {
      if ($username == $dbTeacherUsername) {
        $loggedIn = true;
      }
    }
于 2012-08-09T12:29:57.760 回答
0

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

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

于 2012-08-09T12:24:41.103 回答
-1

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

error_reporting  =  E_ALL & ~E_NOTICE

经过

error_reporting  =  0

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

在您的代码中,您在第 44 行之前遇到了问题。看看您的“While Loop”...

编辑:我刚刚阅读了您的答案+ 1 丹博士

于 2012-08-09T12:37:52.977 回答
-3

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

error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);

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

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

例如。

于 2012-08-09T12:28:29.303 回答