【问题标题】:How to check if both query excecuted successfully?如何检查两个查询是否成功执行?
【发布时间】:2021-08-09 12:56:38
【问题描述】:

我想插入 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);

我想检查两个,当没有错误时,然后运行两个查询。 如何嵌套?

【问题讨论】:

  • 然后验证您的数据? // bind parameters 您如此深切地认为有必要注释掉是您在将其传递给查询之前应该验证的部分。
  • 使用事务

标签: php mysql nested logic


【解决方案1】:

您可以将事务beginTransactionrollBackcommit 与try and catch 一起使用。

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

【讨论】:

  • 我认为应该在事务提交后移动成功消息。
【解决方案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;
    }

【讨论】:

  • 请不要发布仅代码的答案。没有人能从中学到任何东西。如果您认为您的代码可以解决问题,请添加说明,说明您所做的更改以及为什么
  • 嗯,我希望你真的编辑答案来改进它,而不是仅仅承认评论!
猜你喜欢
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多