【问题标题】:beginTransaction PDO for class methods类方法的 beginTransaction PDO
【发布时间】:2013-11-20 00:13:20
【问题描述】:
   <?php

class dbLayer
{

    //connection from here 

    private $done;

    function __construct(PDO $connection)
    {
        $this->done = $connection;

    }

    public function createAction()
    {
        //create a new  item
    }

    public function readAction()
    {
        //read all the  items
    }

    public function updateAction()
    {

        $sql = $this->done->prepare("UPDATE `sync_log` SET `Sync_Status`=? WHERE `randKey`=?");
        $sql->execute(array(
            $status,
            $randKey
        ));
    }

    public function deleteAction()
    {
        //delete a item
    }

}

?>

我想将$pdo-&gt;beginTransaction(); 与类方法一起使用。如果我的更新因updateAction() 方法失败,我如何使用roalback()?

【问题讨论】:

标签: php mysql pdo


【解决方案1】:

已交易updateAction() 示例:

public function updateAction()
{
    try {
        $this->done->beginTransaction();
        $sql = $this->done->prepare("UPDATE `sync_log` SET `Sync_Status`=? WHERE `randKey`=?");
        $sql->execute(array(
            $status,
            $randKey
        ));
        $this->done->commit();
    } catch (PDOException $e) {
        $this->done->rollback();
    }
}

请注意,如果您想返回受影响的行数,您必须在提交后执行此操作。并且您想在回滚后在 catch 块上返回 0 或 false

【讨论】:

  • 异常情况如何?你打算怎么告诉你出了什么问题?
  • 没有理由拒绝投票,因为它不在问题范围内......我的后续评论(基于已删除的 OP 答案)假设 OP 想要默默地失败。如果 OP 要求这样做,我会在回滚后重新抛出异常。
猜你喜欢
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多