如果一个失败,如何停止所有数据库查询

时间:2017-12-10 09:42:07

标签: php

当用户提交表单时,我发生了3个数据库操作。如果一个失败,我不希望它们中的任何一个执行。我目前的代码没有发生。例如,如果我故意在SQL查询中拼错,第二个查询将失败,但第一个查询将起作用,该记录将被更新。如何更改,如果一个失败,根本不对数据库进行任何更改?

public function editAccom($data)
    {
        $this->db->query("UPDATE `accommodation` SET `name` = :name, `description` = :description, `slug` = :slug WHERE `id` = :id LIMIT 1");
        $this->db->bind(":name", $data['name']);
        $this->db->bind(":id", $data['id']);
        $this->db->bind(":description", $data['description']);
        $this->db->bind(":slug", $data['slug']);
        if($this->db->execute() === false) {
            return false;
        }

        $this->db->query("DELETE FROM `accom_pics` WHERE `accom_id` = :id");
        $this->db->bind(":id", $data['id']);
        if($this->db->execute() === false) {
            return false;
        }

        foreach($data['pics'] as $pic) {
            $this->db->query("INSERT INTO `accom_pics` (`accom_id`, `pic_name`) VALUES (:accom_id, :pic_name)");
            $this->db->bind(":accom_id", $data['id']);
            $this->db->bind(":pic_name", $pic);

            if($this->db->execute() === false) {
            return false;

            } 
        }

        return true;
    }

1 个答案:

答案 0 :(得分:2)

您需要数据库交易:

http://php.net/manual/en/pdo.transactions.php

这样,如果出现故障,您可以回滚所有最新的查询。