php pdo insert,更新到一个表中,同时将查询插入到另一个表中

php pdo insert,更新到一个表中,同时将查询插入到另一个表中,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,这是桌子 tbl_one id---int name-var tbl_tow id----int name--var 这是如何使用php pdo插入的 public function insert() { $stmt9 = $this->conn->prepare("INSERT into tbl_one (name) VALUES (:name)"); $stmt9->bindParam(':name' ,$this->name

这是桌子

tbl_one
id---int
name-var


tbl_tow
id----int
name--var
这是如何使用php pdo插入的

public function insert() {  
        $stmt9 = $this->conn->prepare("INSERT into tbl_one (name) VALUES (:name)");
        $stmt9->bindParam(':name' ,$this->name);
        $stmt9->execute();
        if($stmt9){
            echo "Added";
        } else {
            echo "error";
        }
    }
在这里,idia一次在两个表中插入,一次从两个表中删除

这里可能吗

注意:我不能使用触发器,因为我已经在其他情况下进行了设置,所以mysql不支持一次或一次操作中使用多个触发器


关于

我假设您正在寻找交易

只有在提交事务时,查询执行的所有更改才是活动的,如果某些操作失败,您可以简单地执行回滚,而不会发生任何事情

如果您在多个表中有insert,并且希望确保只有在所有查询都成功时才进行更改,那么这将非常有用

例如:

public function insert() {  

    //This will start a transaction and turn-off auto-commit of queries.
    $this->conn->beginTransaction(); 

    $stmt9 = $this->conn->prepare("INSERT into tbl_one (name) VALUES (:name)");
    $stmt9->bindParam(':name' ,$this->name);
    $stmt9->execute();

    $stmt10 = $this->conn->prepare("INSERT into tbl_two (name) VALUES (:name)");
    $stmt10->bindParam(':name' , $someOtherName);
    $stmt10->execute();

    if($stmt9 && $stmt10){
        $this->conn->commit(); //This will save your changes
    } else {
        $this->conn->rollBack(); //This will undo your changes       
    }
}

就这么简单。

这不是你想要的吗

public function insert() {  
    $stmt9 = $this->conn->prepare("INSERT into tbl_one (name) VALUES (:name)");
    $stmt9->bindParam(':name' ,$this->name);
    $stmt9->execute();

    $stmt10 = $this->conn->prepare("INSERT into tbl_one (name) VALUES (:name)");
    $stmt10->bindParam(':name' ,$this->name);
    $stmt10->execute();
    if($stmt9 && $stmt10){
        echo "Added";
    } else {
        echo "error";
    }
}

基本上,您可以在函数中加倍查询,以便“手动”将跟踪插入日志表。抱歉,如果我误解了您的意思。

是的,这是一种历史记录idia是tbl\u一个将被编辑和更新,但tbl\u tow是唯一的insert意味着每个操作或事务都将被插入,因此它将保留任何事务的历史记录。如果您在另一个表中添加其他语句以插入,会有什么问题!!!是$dbh->beginTransaction();或$stmt9->beginTransaction()@更新我的帖子。你需要使用你的“PDO”对象,但是它的名字我不知道,因为你在这里使用的是语句对象。我不太喜欢PDO扩展,所以我不能确定,但我假设它在您的案例中存储为$this->conn。请参阅:如果任何一个查询失败,此代码段都不会回滚查询。这实际上是两个正在执行的独立查询。如果回显
错误
,则只有一个或两个查询均未成功。如果只有一个查询成功,则该行在数据库中,而另一行不在,并且代码不知道哪个查询成功。