10

これが私の場合です:

$sql = 'UPDATE user SET password = ? WHERE username = ? AND password = ?';
if($stmt->prepare($sql)) {
    $stmt->bind_param('sss', $newPass, $_SESSION['username'], $oldPass);
    $stmt->execute();
}

では、UPDATEクエリが正常に実行されたかどうかを確認するにはどうすればよいですか?さらに正確には、新しいパスワードを保存できるように、古いパスワードとユーザー名が正しいかどうかを確認するにはどうすればよいですか?私はこれをやってみました:

$res = $stmt->execute();
echo 'Result: '.$res;

しかし、私はいつも得ます:

Result: 1

古いパスワードが正しくない場合でも。

4

4 に答える 4

20

行を更新しないクエリはエラー状態ではありません。これは、何も変更されていない、単に成功したクエリです。更新によって実際に何かが変更されたかどうかを確認するには、mysqli_affected_rows()を使用する必要があります

于 2012-10-20T15:59:22.927 に答える
4

affected_rows使用しているMySQL拡張機能の機能を使用する必要があります。これは、一致する行がないためにクエリが失敗した場合は0を返し、エラーが発生した場合は-1を返し、変更された行の数を示す正の数を返します。

于 2012-10-20T15:59:36.213 に答える
3

mysqli_affected_rows()影響を受ける行の数を取得するために使用してみてください。

于 2012-10-20T15:59:24.540 に答える
1
 mysqli_query($link, "UPDATE Language SET Status=1 WHERE Percentage > 50");
 printf("Affected rows (UPDATE): %d\n", mysqli_affected_rows($link));

それを試してみてください。

于 2016-10-07T19:33:22.277 に答える