PHP mysql,更新记录失败,但没有错误。
$sql = "UPDATE users SET password='$new_password' WHERE email='$email' AND id='$uId'";
//if ($mysqli->query($sql)) also result in True
if ($mysqli->query($sql) === TRUE) {
$_SESSION['test6'] = $mysqli->error;
$_SESSION['message'] = "Your password have been updated!";
header("location:gain.php");
}
else {
$_SESSION['test7'] = "Error updating record: " . $mysqli->error;
}
我知道为什么它不更新,WHERE
子句中的值不正确。如果值正确,则更新就可以了。
但是无论成功与否,$mysqli->query($sql)
都是true
时,在失败的任何地方都看不到任何错误。
如何捕获错误?
我对此并不陌生,我应该研究一下PDO或它的名字,但是mysqli不应给出某种错误吗?这在XAMPP本地主机上。
答案 0 :(得分:2)
您没有收到错误,因为没有错误,您的搜索条件与任何结果均不匹配。如果要获取受查询影响的行数,只需使用affected_rows()
。
$updated = $mysqli->affected_rows();
if ( $updated == 0 ) {
echo "None were updated!";
}
答案 1 :(得分:0)
<?php
/* from userpage.php, user change password. */
require $_SERVER['DOCUMENT_ROOT'].'/script/_db.php';
date_default_timezone_set("Europe/Stockholm");
setlocale(LC_ALL,'sv_SE.utf8');
$curEmail = $mysqli->escape_string($_POST['curEmail']);
$uId = $mysqli->escape_string($_POST['uId']);
$myQ = "SELECT * FROM `users` WHERE users.email = '$curEmail'";
$result = $mysqli->query($myQ);
$user = $result->fetch_assoc();
if(password_verify($_POST['password1'], $user['password'])) {
if ( $_POST['password2'] == $_POST['password3'] ) {
$new_password = password_hash($_POST['password2'], PASSWORD_BCRYPT);
$sql = "UPDATE users SET password='$new_password' WHERE email='$curEmail' && id='$uId'";
$resupdat = $mysqli->query($sql);
$afRows = $mysqli->affected_rows;
if ($resupdat === TRUE && $afRows > 0) {
$_SESSION['message'] = "Ditt lösenord har uppdaterats!";
header("location:gain.php");
}
else {
if($afRows == 0){
$msg = $afRows."/ Password was not updated!";}
$_SESSION['message'] = "Error updating record: " . $mysqli->error. "<br>".$msg;
header("location:failure.php");
}
}
else {
$_SESSION['message'] = "De lösenord du angett matchar inte, försök igen!";
header("location:failure.php");
}
}
else {
$_SESSION['message'] = "Fel lösensord, försök igen!";
header("location:failure.php");
}
?>