我正在我的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、DELETE 或 INSERT,则可以使用
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
}
例如。