Das ist mein Perl-Code ist:perl mySQL Verfahren mit Einsatz und wählen Sie schlägt fehl, wenn in der Transaktion
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 ([email protected]) {
warn [email protected]; # print the error
}
}
Die mySQL Transaktion wie folgt:
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
Wenn ich setzen $dbc->commit;
nach dem execute
oder fetchrow_array
, bekomme ich eine Commands out of sync
Fehler. Wenn ich die AutoCommit
Zeile entferne, funktioniert der Code, aber ich kann keine Transaktionen verwenden.
Wenn ich versuche, AutoCommit
während der Sub zu ändern, erhalte ich diesen Fehler: Turning off AutoCommit failed
.
Jede Hilfe würde sehr geschätzt werden.
Duplizieren: http://stackoverflow.com/q/6454840/132382 – pilcrow