如何删除这个mysqli警告?

时间:2012-08-09 12:22:24

标签: php mysqli

我在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 个答案:

答案 0 :(得分:1)

更改

$stmt->execute(); 

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

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

答案 1 :(得分:0)

UPDATE语句不会产生结果集。引自the docs

  

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

答案 2 :(得分:-1)

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

中替换
error_reporting  =  E_ALL & ~E_NOTICE

通过

error_reporting  =  0

但如果您的代码完美,则不会出现警告信息,必须在Php中显示警告,解决 警告消息问题。< / p>

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

编辑:我正在读你的答案+ 1 Dan博士

答案 3 :(得分:-3)

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

error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);

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

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

例如。