Hello,
Can someoneone tell me when you prepare()
a statement (in my case an update statement) and then execute()
it, i then check using rowCount()
after the update query (see code below) if rowCount() > 0
if it is then a match was found and update took place, but i then got an else
statement, now my question is do i need the else statement ? , i think its better explained in code below, i commented the code and commented in more depth the area of code i am talking about.
Please ignore the UPDATE SQL in the prepare statement as i think its wrong and will deal with later.
// check if key is set and alphanumeric and equals 32 chars long
// we use sha1 so it will always be 40 chars long.
if(isset($_GET['key']) && ctype_alnum($_GET['key']) && strlen($_GET['key']) == 40){
$key = trim(msqls($_GET['key']));
}
// if key isset and valid
if(isset($key)){
try {
// connect to database
$dbh = sql_con();
// checke if activation key matches and user_uid matches
$stmt = $dbh->prepare("
SELECT
users_status.user_uid,
users_status.user_activation_key
FROM
users_status
JOIN
users
ON
users_status.user_activation_key = ?
AND
users_status.user_uid = users.user_uid LIMIT 1");
// execute query
$stmt->execute(array($key));
// if row count greater than 0 then match found
if ( $stmt->rowCount() > 0 ) {
// user verified; we now must update users status in users table to active = 1
// and set the user_activation_key in the users_status to NULL
$stmt = $dbh->prepare("
UPDATE
users.user_status,
users_status.user_activation_key
SET
user_status = ".USER_STATUS_ACTIVE.",
user_activation_key = NULL
JOIN
users
ON
users_status.user_activation_key = ?
AND
users_status.user_uid = users.user_uid LIMIT 1");
// execute query - THIS IS THE UPDATE EXECUTE QUERY
$stmt->execute(array($key));
// I AM NOW CHECKING IF THE RETURNED RESULT IS GREATER THAN 0; IF IT IS THEN MATCH FOUND AND UPDATE WAS SUCCESFUL
if ( $stmt->rowCount() > 0 ) {
// update was succesful .. DO WHATEVER I WANT HERE
} else {
// update not sucessful
// THIS IS THE BIT IM CONFUSED WITH; DO I NEED THIS ?
// IF RETURNED RESULT IS 0 THEN I GUESS THAT MEANS THERE WAS NOT AN ERROR IN SQL SYNTAX BUT
// CONDITION IN SQL STATEMENT COULD NOT BE MATCHED ? IS THAT CORRECT WHAT I AM THINKING ?
// IF I AM CORRECT THEN OBVIOUSLY I WILL DISPLAY A MESSAGE TO USER AND EXIT HERE;
// AS IF I AM THINKING RITE ANY SYNTAX ERROR WOULD BE CAUGHT BY CATCH BLOCK AND THIS ELSE STATEMENT
// MEANS COULD NOT UPDATE BECAUSE NO MATCH IN UPDATE QUERY COULD BE FOUND ?
}
} // else no match found
else {
// no match found invalid key
}
} // if any errors found log them and display friendly message
catch (PDOException $e) {
ExceptionErrorHandler($e);
require_once($footer_inc);
exit;
}
} else {
// else key not valid or set
echo '<h1>Invalid Activation Link</h1>';
$SiteErrorMessages =
"Oops! Your account could not be activated. Please recheck the link in your email.
The activation link appears to be invalid or has now expired.<br /><br />
Please request a new one <a href='/member/resend-activation-email'>here</a>.
If the problem persists please contact us <a href=\"/contact\">here</a>.";
SiteErrorMessages();
include($footer_inc);
exit;
}
Thanks for any help as always,
phplover