I have a query that updates a record on my database, it works fine but i wanted to know how to check if the update has happened so i can return true and display the right me
Execute
method returns True when it finished successfully, but, if this behavior is not enough for you, you can check also for affected rows:
$query = "UPDATE user
SET password = ?
WHERE email = ?";
if($stmt = $conn->prepare($query))
{
$stmt->bind_param('ss', $pwd, $userEmail);
if ($stmt->execute()) {
//query with out errors:
printf("rows updateds: %d\n", $stmt->affected_rows);
} else {
//some error:
printf("Error: %s.\n", $stmt->error);
}
}
The second check you can do is to verify that exactly 1 row was updated:
if($stmt = $conn->prepare($query))
{
$stmt->bind_param('ss', $pwd, $userEmail);
if ($stmt->execute() and $stmt->affected_rows == 1) {
//your update is succesfully.
}
}
Would the mysql_affected_rows() function work for you?
A few years late, but perhaps this could help someone..
As others have mentioned already you can use affected_rows to check if the UPDATE query in a PREPARED STATEMENT has indeed updated any record. However, do note that if the submitted data is the same as the record in the database 'affected_rows' will return a zero (0).
A workaround of mine is creating a column for TIMESTAMP with ON UPDATE CURRENT_TIMESTAMP. Then every time I run the query, I'll also pass on a NULL value to the column tracking the time - that way forcing the row to UPDATE every time the query is executed. Then all you do is check for affected_rows.
check if below works:
$query = "UPDATE user
SET password = ?
WHERE email = ?";
if($stmt = $conn->prepare($query)) {
$stmt->bind_param('ss', $pwd, $userEmail);
if ($stmt->execute()) {
// Worked...
} else {
// Didn't work...
}
}