我有一个 php 代码页面,使用用户的新密码字符串来更改用户密码,并在一些验证代码发送到处理页面以更新用户表中的记录后。将新密码字符串发送到处理页面并进行更新查询后,mysqli_affected_rows 返回 -1 但更新查询成功并且密码已更改 或者如果之前的密码字符串与之前的密码相同,更新查询不进行任何更改但仍返回 -1 .
我在所有代码中都使用了 mysqli 函数。db_conncet_fnc(),db_query_func(),db_fetch_assoc_func(),... 这些函数包括相同的 mysqli 函数。
我的进程页面代码是这样的:
$link_con=db_conncet_fnc();
require_once("PassHash.php");
$query = "SELECT * FROM mdr WHERE m_id='$md_id'";
$result = db_query_func($query);
$affecteds= mysqli_affected_rows($link_con);
$_SESSION["affecteds"]=$affecteds; //this is for test before UPDATE query
$_SESSION["affected-s-oop"]=$link_con->affected_rows; //this is for test before UPDATE query
$rec = db_fetch_assoc_func($result);
$p_hasher = new PassHsh(25, FALSE);
$ans = "2"; //answer without error is 2
if($rec)
{
if ($pass != "" && $newpsw != "" && $check = $p_hasher->checkpss($newpsw, $rec["userpass"])) {
if ($chngpsw_err < 2) {
$_SESSION["chngpsw_err"] = "has";
}
$_SESSION["pass_nwpass_is_equal"] = "yes";
header("location:index.php?page=chngpass");
exit();
} elseif ($check = $p_hasher->checkpss($pass, $rec["userpass"])) {
$hashed_psw = $p_hasher->HashPassword($newpsw);
$query = "UPDATE `mdr` SET `userpass`='$hashed_psw' WHERE m_id='" . $md_id . "' ";
$result = db_query_func($query);
$affect_upd = mysqli_affected_rows($link_con);
$_SESSION["affect_upd"] = $affect_upd; //by function
$_SESSION["affect_upd-oop"] = $link_con->affected_rows; //by object
if ($affect_upd == 0) {
$_SESSION["update_result"] = "err0";
header("location: index.php?page=chngpass");
exit();
}
if ($affect_upd == -1) {
$_SESSION["update_result"] = "err-1";
header("location: index.php?page=chngpass");
exit();
}
if ($affect_upd > 0) {
$_SESSION["update_result"] = "ok";
header("location: index.php?page=chngpass");
exit();
}
} else {
$ans = "1";
header("location: index.php?page=chngpass&ans=$ans");
}
}
我在stackoverflow和google中发现了一些关于这个的问题,并讨论了mysqli中的错误与xdebug这样的https://bugs.php.net/bug.php?id=67348 但我不使用$connect->stat和一些页面写关于 mysqli 中每个启用 xdebug 的错误,所以我在 php.ini 中禁用 xdebug 但 mysqli_affected_rows 在所有状态和事件以及所有位置都返回 -1。
我之前使用谷歌浏览器调试 phpstorme。
我应该禁用 Chrome 中的某些内容吗?
更新:(2018/08/01):
经过几天谷歌在各个网站上搜索并在stackoverflow中搜索并执行所写的步骤和建议后,我无法解决它。
一个名叫“siddharaj solanki”的人在这个问题中写道:
mysqli_affected_rows 创建新连接(阅读详细信息) 写道:
现在的问题是我不明白如何在 mysqli_affected_rows() 函数中传递数据库链接($link)。我在上面尝试过,但它似乎创建了一个新的数据库连接,所以 mysqli_affected_rows 返回 0 而不是 1。
因此,根据我的研究和此链接,我认为该错误不会轻易解决此功能:
https://www.google.com/search?q=bug+mysqli_affected_rows
请指导我什么解决方案或什么是好的或最好的方法而不是 mysqli_affected_rows 来检查更新查询?
美好时光
请帮我解决这个问题。
谢谢。