我面临一个奇怪的问题
zend_db_适配器的beginTransaction()和commit()方法似乎没有按预期工作。我在beginTransaction()和commit()方法中有insert语句(在for循环中)。但是,即使出现如下错误,我仍然看到已经插入了一些行,而我希望自从出现错误后不会进行提交。我不明白为什么。有人能帮忙吗?谢谢。
sqlstate[23000]:完整性约束冲突:键“primary”的1062重复项“0”
代码块类似:

      **$localDB->beginTransaction();**
    try{
        echo $localDB->isConnected();

        $localDB->query("TRUNCATE TABLE $this->dbTable");
        **foreach ($rowSet as $row){**
            foreach ($row as $key=>$value){
                $localRow[$this->columnMap[$key]] =$value;
            }
            **$localDB->insert($this->dbTable,$localRow);**

        }

         $localDB->commit();
        }
        catch (Exception $e){
        $localDB->rollBack();
        echo $e->getMessage();
    }

最佳答案

TRUNCATE TABLE将导致implicit commitwich结束当前事务。
1)将TRUNCATE TABLE置于beginTransaction()之前。

$localDB->query("TRUNCATE TABLE $this->dbTable");
$localDB->beginTransaction();
try {
    ...

    $localDB->commit();
} catch (Exception $e){
    $localDB->rollBack();
    echo $e->getMessage();
}

2)DELETE FROM应该是事务保存(but slower
$localDB->beginTransaction();
try {
    $localDB->query("DELETE FROM $this->dbTable");
    ...

    $localDB->commit();
} catch (Exception $e){
    $localDB->rollBack();
    echo $e->getMessage();
}

10-08 06:20