i have a code that use commit and rollback
$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();
}
my question is . when i execute this . . is says. There is already an active transaction and data is has not save in database. . dbpdo class has extend PDO class.
I got the same scenario here today... I was trying to insert some master-detail records at Firebird and getting There is already an active transaction error.
My solution was to enable and disable the autocommit option, try this:
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0)
before calling $pdo->db->beginTransaction()
And when you complete your transaction, re-enable autocommit:
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 1)
Reference: http://php.net/manual/pt_BR/pdo.begintransaction.php#113602
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With