我有一个使用提交和回滚的代码
$pdo = new dbpdo();
$fields = ['id','last','first'];
$values = [NULL,'asd','asd'];
//$pdo->db->beginTransaction();
try {
$pdo->db->beginTransaction();
//echo 'connected';
//$pdo->InsertBatch('staff',implode(',',$data));
//$pdo->InsertBatch('staff',implode(',',$fields), implode(',',$values));
$pdo->InsertBatch('staff',$fields, $values);
//$pdo->exec("INSERT INTO staff('id','first','last') VALUES ('NULL','asd','asd')");
//$pdo->execute();
$pdo->commit();
//$message = 'success';
echo 'Save';
} catch (Exception $e) {
//die("Unable to connect: " . $e->getMessage());
$pdo->rollBack();
//$message = 'sayop';
//die("Unable to connect: " . $e->getMessage());
echo "Failed: " . $e->getMessage();
}
我的问题是。当我执行这个。 。是说。已有活动事务,数据未保存在数据库中。 。 dbpdo类具有扩展PDO类。
答案 0 :(得分:0)
我今天在这里得到了相同的场景......我试图在Firebird上插入一些主 - 详细记录并获得已经存在活动事务错误。
我的解决方案是启用和禁用自动提交选项,试试这个:
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0)
在致电$pdo->db->beginTransaction()
当您完成交易时,请重新启用自动提交:
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 1)
参考: http://php.net/manual/pt_BR/pdo.begintransaction.php#113602
答案 1 :(得分:0)
有时您正在打开连接,但并未关闭。 例如:
function insert($object){
try {
$this->_DB->beginTransaction(); // OPEN TRANSATION
$query = 'INSERT INTO table VALUES (?,?,?,?)';
$stmt = $this->_DB->prepare($query);
$stmt->execute( [$object->id, $object->name, $object->last_name, $object->email] );
$this->_DB->commit(); //CLOSE -> In some function it must be missing!
return $stmt->rowCount();
} catch (Exception $e) {
$this->_DB->rollBack();
return $e->getMessage();
}
}