【发布时间】:2014-11-05 14:16:55
【问题描述】:
我需要同时在两个数据库中进行更改,但是如果其中一个失败,我不希望它们中的任何一个都通过。
此代码块尝试更新两个独立数据库中用户的密码。第一个查询进行,然后切换数据库,然后进行第二个查询。如果出现错误,try/catch 块将触发,但是如果 first query is successful 和 second query is not,first query 仍然会通过,尽管异常被抛出和捕获。 try/catch 不是解决这个问题的正确方法吗?
感谢您的任何意见!
try {
$new_hash = password_encrypt($new_password);
$query = "UPDATE user SET ";
$query .= "user.hashedPassword = '{$new_hash}' ";
$query .= "WHERE user.userID = '{$user_id}' ";
if(!mysqli_query($connection, $query)) {
throw new Exception('Change Unsuccessful.');
}
if(!mysqli_select_db($connection, 'sub_' . $user['username'] . '_db')) {
throw new Exception('Change Unsuccessful. Switch Error.');
}
$query = "UPDATE user SET ";
$query .= "user.hashedPassword = '{$new_hash}' ";
$query .= "WHERE user.userID = '{$user_id}' ";
if(!mysqli_query($connection, $query)) {
throw new Exception('Change Unsuccessful.');
}
$_SESSION['message'] = 'Password Changed.';
$_SESSION['messageType'] = 'success';
redirect_to("/main.php");
} catch(Exception $e) {
$_SESSION['message'] = $e->getMessage();
$_SESSION['messageType'] = 'danger';
redirect_to("/main.php");
}
【问题讨论】: