gpt4 book ai didi

php - 检查前一个 MySQL 查询的状态并执行下一个查询

转载 作者:行者123 更新时间:2023-11-29 11:48:19 24 4
gpt4 key购买 nike

我想执行多个 MySQL 查询。下一个查询取决于上一个查询的状态。我需要检查查询状态,在某些情况下还需要检查rowCount()。如果第一个查询返回我想要的结果,则将执行下一个查询,依此类推。如果其中之一失败,整个过程将停止。

我通常将查询嵌套在 try/catch block 中。有一个更好的方法吗?这是我的代码。我不希望你修复我的代码,只是看看它并给我任何建议。我将 PDOMySQL 5.6.26 一起使用。

谢谢

$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 )

关于php - 检查前一个 MySQL 查询的状态并执行下一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34561293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com