如果第二个查询不起作用,则删除或撤消第一个查询

我对此感到困惑。有什么方法可以测试所有查询是否都有效并且不返回错误?如果是这样,请执行它们或返回一些东西。

我正在构建一个注册方法,它有 2 个部分:loginInfo(用户名、密码)和通常的员工信息(姓名、电子邮件等)。

signup 方法将员工信息插入employee表中,然后获取 PRIMARY 键并将其与login表中的 loginInfo 一起插入

login表有一个UNIQUE列,这应该在重复时返回错误。问题是employee插入的login信息没有信息。

我怎么解决这个问题?

我的代码:

public function signUp($personInfo, $employeeInfo, $loginCredit){
    try {
        $stmt = $this->pdo->prepare("INSERT 
            INTO `$this->employeeTable`
                (`name`, `birthDay`, `phnNmb`, `email`, `address`, `idnNmb`, `insNmb`, `bankInfo`)
            VALUES
                (?, ?, ?, ?, ?, ?, ?, ?);
        ");

        $stmt->execute([
            $personInfo["name"],
            $employeeInfo["birthDay"],
            $personInfo["phnNmb"],
            $personInfo["email"],
            json_encode($employeeInfo["address"]),
            $employeeInfo["idnNmb"],
            $employeeInfo["insNmb"],
            json_encode($employeeInfo["bankInfo"])
        ]);

        $employeeId = $this->pdo->lastInsertId();

        $insertloginCredit = $this->pdo->prepare("INSERT INTO `$this->loginTable` (`empId`, `userName`, `userPass`) VALUES ($employeeId, ?, ?);");
        $insertloginCredit->execute($loginCredit["userName"], md5($loginCredit["userPass"]));

        echo "done";

    } catch (PDOException $err) {
        die($err->getMessage());
    }
}

回答

您在此处寻找的内容称为交易。PDO 文档对它们有一些解释。总之,您需要执行以下操作。

try{
  $this->pdo->beginTransaction();
  $stmt1 = $this->pdo->prepare(...);
  $stmt1->execute(...);
  $stmt2 = $this->pdo->prepare(...);
  $stmt2->execute(...);
  $this->pdo->commit();
} catch (PDOException $e) {
  $this->pdo->rollBack();
}

rollBack函数会将数据库恢复到beginTransaction调用时的状态。


以上是如果第二个查询不起作用,则删除或撤消第一个查询的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>