ユーザーパスワードを変更するためにユーザーの新しいパスワード文字列を取得するphpコードのページがあり、いくつかの検証コードがユーザーテーブルの更新レコードのプロセスページに送信された後。プロセス ページに新しいパスワード文字列を送信し、更新クエリを実行した後、mysqli_affected_rows は -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 でこれに関するいくつかの質問を見つけ、このhttps://bugs.php.net/bug.php?id=67348のような xdebug でmysqliのバグについて議論しまし たが、私は $connect->stat を使用していません。 xdebugが有効になっているすべてのmysqliのバグについて、php.iniでxdebugを無効にしますが、mysqli_affected_rowsはすべての状態とイベント、およびすべての位置で-1を返します。
以前、phpstorme でのデバッグには Google Chrome を使用していました。
Chrome で何かを無効にする必要がありますか?
更新:(2018/08/01):
Googleでさまざまなサイトを検索し、stackoverflowで検索して、書かれた手順と提案を実行して数日後、解決できませんでした。
「siddharaj solanki」という名前の人は、この質問に次のように書いています。
mysqli_affected_rows は新しい接続を作成します (詳細を読む) 書きました:
問題は、mysqli_affected_rows() 関数でデータベース リンク ($link) を渡す方法がわからないことです。上記で試してみたのですが、新しいデータベース接続を作成するようで、mysqli_affected_rows が 1 ではなく 0 を返します。
したがって、私の調査とこのリンクに基づいて、この機能のバグは簡単には解決されないと思います。
https://www.google.com/search?q=bug+mysqli_affected_rows
更新クエリを確認するための mysqli_affected_rows の代わりに、解決策を教えてください。
良い時間
それを解決するのを手伝ってください。
ありがとう。