如何检查两个查询是否成功执行?

How to check if both query excecuted successfully?

提问人:NeonSmash 提问时间:8/9/2021 更新时间:8/9/2021 访问量:43

问:

我想将 INSTERT 分成 2 个不同的表。人们将填写一个表单,在其中输入他们的用户数据和他们的公司数据。我测试了这个表格,当一切正确时,它很好,但是......当用户数据正常,但公司数据有错误时,用户插入运行,我不想要它。反之亦然。 我现在的代码:(只是一个标记)

$sql = "INSERT INTO user (name, email, password) VALUES (:username, :email, :password)";
  $stmt = $dbh->prepare($sql) {
    ... //bind parameters
    if($stmt->execute()){
      echo "Successfully registered user";
    $sql = "INSERT INTO company (title, number, address) VALUES (:title, :number, :address)";
      $stmt = $dbh->prepare($sql) {
        ... //bind parameters
        if($stmt->execute()){
        echo "Successfully registered company";
      }
    }
  }
}
unset($stmt);

我想检查两者,如果没有错误,则运行两个查询。 如何嵌套它?

php mysql 嵌套 逻辑

评论

0赞 Jaquarh 8/9/2021
那么验证您的数据呢? 您如此深刻地认为有必要注释掉是在将其传递给查询之前应该验证的部分。// bind parameters
2赞 Maksim 8/9/2021
使用交易记录

答:

1赞 kup 8/9/2021 #1

您可以使用 transactions , , 和 try 和 catch。beginTransactionrollBackcommit

$dbh->beginTransaction()
try {
$sql = "INSERT INTO user (name, email, password) VALUES (:username, :email, :password)";
  $stmt = $dbh->prepare($sql) {
    ... //bind parameters
    if($stmt->execute()){
      echo "Successfully registered user";
    $sql = "INSERT INTO company (title, number, address) VALUES (:title, :number, :address)";
      $stmt = $dbh->prepare($sql) {
        ... //bind parameters
        if($stmt->execute()){
        echo "Successfully registered company";
      }
    }
  }
}
} catch(\Exception $e) 
    $dbh->rollBack();
}
$dbh->commit();
unset($stmt);

评论

0赞 Slava Rozhnev 8/9/2021
我认为应该在事务提交后移动成功消息。
-1赞 Adrian Mold 8/9/2021 #2
    try {
        $pdo->prepare($agr_query_string);
        $commited = $pdo->commit();
        if($commited){
         echo "Success";
        }else{
         echo "Fail";
         $pdo->rollBack();
        }
      } catch (PDOException $e) {

        $pdo->rollBack();
        print "rollBack : fail";

        //throw new $e;
    }

评论

1赞 ADyson 8/9/2021
请不要发布仅代码的答案。没有人能从中学到任何东西。如果您认为您的代码解决了问题,请添加一个描述,解释您更改了什么以及为什么
0赞 ADyson 8/10/2021
好吧,我希望您实际上会编辑答案以改进它,而不仅仅是承认评论!