[英]Check status of previous MySQL query and execute next query
我想执行多个MySQL查询。 下一个查询的位置取决于上一个查询的状态。 我需要检查查询的status of the query
在某些情况下还要检查rowCount()
。 如果第一个查询返回我想要的内容,则将执行下一个查询,依此类推。 如果其中之一失败,则整个过程将停止。
我通常将nest my queries inside of a try/catch block
。 有一个更好的方法吗? 这是我的代码。 我不想让您修改我的代码,只是看到它并给我任何建议。 我在MySQL 5.6.26
使用PDO
。
谢谢
$updated = false;
//#1
$query = "select username, forgot_code, time, valid from forgot_requests where forgot_code = :forgot_code";
try {
$run_query = $db->prepare($query);
$run_query->execute(array(':forgot_code' => $_POST['forgot_code']));
$data = $run_query->fetch(PDO::FETCH_OBJ);
//13min = 780s
if($run_query->rowCount() == 1 && (time() - $data->time < 7800000) && $data->valid) {
//#2
$query = "update users set password = :password where username = :username";
try {
$run_query = $db->prepare($query);
$run_query->execute(array(
':password' => password_hash($_POST['password'], PASSWORD_DEFAULT),
':username' => $data->username
));
//#3
$query = "update forgot_requests set valid = 0 where forgot_code = :forgot_code";
try {
$run_query = $db->prepare($query);
$run_query->execute(array(':forgot_code' => $_POST['forgot_code']));
//update
$updated = true;
} catch(PDOException $e) {}
} catch(PDOException $e) {}
}
} catch(PDOException $e) {}
我假设您想在事先注意的情况下强制执行有效的数据库状态。
MySQL和PDO为您提供事务的概念,以确保仅一起执行一系列sql语句。
例
<?php
$db->beginTransaction();
// Query 2
$query = "update users set password = :password where username = :username";
$run_query = $db->prepare($query);
$run_query->execute(array(
':password' => password_hash($_POST['password'], PASSWORD_DEFAULT),
':username' => $data->username
));
// Query 3
$query = "update forgot_requests set valid = 0 where forgot_code = :forgot_code";
$run_query = $db->prepare($query);
$run_query->execute(array(':forgot_code' => $_POST['forgot_code']));
// All queries will be executed or no query will be executed
$db->commit();
?>
如果遇到任何问题,可以回滚事务:
<?php
$db->rollBack();
?>
可以在MySql手册中找到更多信息:( http://dev.mysql.com/doc/refman/5.7/en/commit.html )和php文档( http://php.net/manual/de/pdo .begintransaction.php )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.