Это мой perl-код:
my $dbc = DBI->connect('DBI:mysql:test', "entcfg", "entcfg") || die "Could not connect to database: $DBI::errstr";
$dbc->{TraceLevel} = "2"; #debug mode
$dbc->{AutoCommit} = 0; #enable transactions, if possible
$dbc->{RaiseError} = 1; #raise database errors
###sql commands
my $particle_value = $dbc->prepare('CALL particle_test_value(?,?,?,?)');
my $particle_name = $dbc->prepare('CALL particle_test_name(?,?,?,?)');
my $table_test = $dbc->prepare('CALL table_test(?,?,?)');
sub actionMessage {
my ($sh,$msgobj) = @_;
my @result;
my $return_ID;
eval {
$table_test->execute(undef,"value","value"); #new item
$return_ID = $table_test->fetchrow_array(); #get new row id
};
if ($@) {
warn $@; # print the error
}
}
Транзакция mySQL выглядит следующим образом:
CREATE DEFINER=`root`@`localhost` PROCEDURE `table_test`(
v_id INT,
v_name VARCHAR(255),
v_value VARCHAR(255)
)
BEGIN
INSERT INTO test (name,value) VALUES (v_name,v_value);
SELECT LAST_INSERT_ID();
END
Если я поставлю $dbc->commit;
после execute
или fetchrow_array
, Я получаю Commands out of sync
ошибку.
Если я удаляю строку AutoCommit
, код работает, но я не могу использовать транзакции.
Если я пытаюсь изменить AutoCommit
во времясуб, я получаю эту ошибку: Turning off AutoCommit failed
.
Любая помощь будет высоко ценится.