我遇到了一个奇怪的问题
Zend_DB_Adapter 的 beginTrasaction() 和 commit() 方法似乎没有按预期工作。我有包含在 beginTrasaction() 和 commit() 方法中的 INSERT 语句(在 FOR 循环中)。但是即使发生如下错误,我仍然看到已经插入了一些行,而我期望由于发生错误而不会发生提交。我无法理解为什么。有人可以帮忙吗。谢谢。
SQLSTATE[23000]:违反完整性约束:1062 键“PRIMARY”的重复条目“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 commit这将结束当前交易。
1) 在 beginTransaction()
之前放置 TRUNCATE TABLE
。
$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();
}
关于mysql - zend 适配器 beginTransaction() 和 commit() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6067614/