【问题标题】:PHP - Postgresql How I can rollback a query if is returning error?PHP - Postgresql 如果返回错误,我如何回滚查询?
【发布时间】:2017-08-01 21:46:51
【问题描述】:

我正在使用 php 和 postgres 进行 CRUD,我想知道是否有办法在出现错误时回滚事务。 实际上,如果我在事务中遇到错误,则 id(主键)会增加,那么我会丢失一个 id 以供将来使用。

我该如何预防呢?我的意思是,如果插入的查询失败,不要在表中进行自动递增。

我正在使用一个类来执行查询:

public function insertRecord ($data){
        $campos =$this->getTableFields();
        $data =implode ("', '", $data);
        $sql ="INSERT INTO {$this->table} ($campos) VALUES (";
        $sysData =$this->getDefaultValues();
        if($sysData){
            $sysData .= ",";
            $sql .="$sysData ";
        }
        $sql .="'$data') RETURNING {$this->campoId};";
        echo $sql;
        pg_query($this->linkid,$sql);
        return $this->validateOperation();
    }

【问题讨论】:

  • 看看Transactions
  • @tyteen4a03,我读过它,但我问,我有一个名为 PG 的类,我将所有语句(插入、更新、选择、删除)放在其中,然后我有单独的类表的使用(文章,art_mov,art_warehouse),并且在每个类中我调用传递表和条件的语句,鉴于它,我必须在每个类中创建 sql 语句?因为在每个表中我都没有进行相同的查询 - 现在我不知道如何解释我的问题

标签: php postgresql auto-increment


【解决方案1】:

事务被回滚。但它仍然会用完序列中的一个数字,自动递增值是基于该数字的。这是设计使然,可以防止长时间锁定,这会降低并行执行性能。

有一些解决方法:

【讨论】:

  • 好吧,我又提出了一个问题,这条评论回答了这两个问题,如果我想创建一个手动序列(以显示一个漂亮的数字),我想我需要改进另一列(以显示一个漂亮的数字)非常感谢@Tometzky
猜你喜欢
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
相关资源
最近更新 更多