Check if update query was successful [PHP, mysqli]

2020-03-26 04:57发布

问题:

I'm working with PHP and mysqli, what the program is doing is that it is asking for a reset code and email address if the email add and reset code are found in the database it sets the password,this part of the function is working,

I need help with this part: what I need to do is tell the user if the password was set or not so if the update was successful or not.

What I'm working on:

$uinsert =  "UPDATE member SET password = '$password' WHERE emailadd = '$emailadd' AND resetCode = '$resetcode'";

    $update = mysqli_query($mysqli, $uinsert) or die(mysqli_error($mysqli));

     if(mysqli_affected_rows($update) == 1 ){ //ifnum
        header("location: ../index.php"); // Redirecting To Other Page
    }
    else{
        echo "<script> alert('Incorrect code, try again!');</script>";
    }

Note: $mysqli is my connection string

回答1:

"@Fred-ii- Thank you so much that works! – Coffee coder 58 secs ago"

Use if(mysqli_affected_rows($mysqli) >0 ) or no comparison at all.

Sidenote: ==1 is only comparing for 1, as opposed to >0 which you may be trying to update more than one row. However and on the rare occasion, >0 is required where this has also happened to me before; that is the reason of my answer.

affected_rows() uses the connection, not the one for the query.

  • http://php.net/manual/en/mysqli.affected-rows.php

Plus, if you're storing plain text passwords, use password_hash() since it's much safer:

  • http://php.net/manual/en/function.password-hash.php

Sidenote: If you do decide to move over to that function, make sure that you do not manipulate the password at all. Hashing/verifying it takes care of that and you may be doing more harm than good in doing so and limiting passwords.

I.e.: A valid password of test'123 would be interpreted as test\'123 and rendering FALSE when using real_escape_string() for example.

Or you may still be using hash_hmac as per your other question Comparing/check if correct Password from mysqli database [hash_hmac]

and a prepared statement:

  • https://en.wikipedia.org/wiki/Prepared_statement

It is also best to add exit; after header. Otherwise, your code may want to continue to execute.

header("location: ../index.php");
exit;


回答2:

Change the parameter of mysqli_affected_rows(), the parameters must be the mysql connection

mysqli_affected_rows($update)

to

mysqli_affected_rows($mysqli)

Please see this reference https://www.w3schools.com/php/func_mysqli_affected_rows.asp



回答3:

if (mysqli_affected_rows($mysqli) == 1 ) {

Because mysqli_affected_rows() does not use the query $update as its parameter, it uses the connection variable: $mysqli



回答4:

pass your mysqli connection object ($connection) to mysqli_affected_rows(connection_object) to check affected rows.

connection_object is like - $con=mysqli_connect("localhost","bd_user","db_password","your_db_name");

So , code will be

if(mysqli_affected_rows($con)== 1 ){ 
   header("location: ../index.php"); 
}