我在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.";
}
?>
答案 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
}
例如。