Is it correct that execute_array does not raise/print an error



Hi,

I have some code which uses execute_array but it appears when it fails
my error handler is not called and no error is printed despite setting
PrintError and RaiseError. The script below illustrates. Is it correct that an
error can occur in execute_array and it not cause a die when RaiseError is set?

use DBI;
use strict;
use Data::Dumper;

sub fred
{
print "Error Handler called\n";
print Dumper(\@_);
}

my $dbh = DBI->connect(
'DBI:mysql:mjetest', 'xxx', 'yyy',
{ RaiseError => 1, PrintError => 1, HandleError => \&fred});
$dbh->do(q/drop table if exists mytest/);
$dbh->do(q/create table mytest (a int primary key, b char(20))/);

my $sth = $dbh->prepare(q/insert into mytest values (?,?)/);
$sth->bind_param(1, 1);
$sth->bind_param(2, 'onetwothree');
$sth->execute;

$sth->bind_param_array(1, [51,1,52,53]);
$sth->bind_param_array(2, ['fiftyone', 'fiftytwo', 'fiftythree', 'one']);
my @tuple_status;
my $inserted = $sth->execute_array( { ArrayTupleStatus => \@tuple_status } );
print "Error from execute_array - $DBI::errstr\n" if (!$inserted);

which produces:

Error from execute_array -

even though the trace indicates:

<- prepare('insert into mytest values (?,?)')= DBI::st=HASH(0x82a1b80) at
execute_array.pl line 17
<- bind_param(1 1)= 1 at execute_array.pl line 18
<- bind_param(2 'onetwothree')= 1 at execute_array.pl line 19
<- execute= 1 at execute_array.pl line 20
<- bind_param_array(1 ARRAY(0x829d4f8))= 1 at execute_array.pl line 22
<- bind_param_array(2 ARRAY(0x829d534))= 1 at execute_array.pl line 23
<- execute_array(HASH(0x829d5c4))= undef at execute_array.pl line 26


Thanks

Martin
--
Martin J. Evans
Easysoft Ltd, UK
http://www.easysoft.com

.



Relevant Pages

  • Re: Is it correct that execute_array does not raise/print an error
    ... They are stored in the ArrayTupleStatus. ... RaiseError should say it causes a die for all error in methods except ... my error handler is not called and no error is printed despite setting ... PrintError and RaiseError. ...
    (perl.dbi.users)
  • RE: What am I doing wrong?
    ... Surely they don't all deserve such wide range, ... fill in the placeholder. ...
    (perl.beginners)
  • Re: Is it correct that execute_array does not raise/print an error
    ... stored in the ArrayTupleStatus have a parse through that array to see it the ... my error handler is not called and no error is printed despite setting ... PrintError and RaiseError. ...
    (perl.dbi.users)
  • Re: PrintError wont turn off
    ... to explicitly state the attributes you want. ... What would you think about making PrintError ... default to 0 when RaiseError is on? ... The DBI tracing mechanism can already show one level of stack trace ...
    (perl.dbi.users)
  • Re: ShowErrorStatement
    ... The idea is you don't have to litter your code with "or ... I recommend that everyone who doesn't carefully read the release notes ... ShowErrorStatement just tweaks the behaviour of RaiseError and PrintError. ...
    (perl.dbi.users)