in reply to Having problem with handling DBI error in object

I'm not sure what you're trying to accomplish that leaving RaiseError off and PrintError on wouldn't accomplish. By checking only the execute() and not the prepare() you may, depending on the driver, be losing the actual cause of the error. Also, while $DBI::errstr should work in most situations you are better off using the errstr most closely associated with the object in questions, $dbh->errstr for prepare and other database handle methods $sth->errstr for execute and other statement handle methods.
  • Comment on Re: Having problem with handling DBI error in object

Replies are listed 'Best First'.
Re^2: Having problem with handling DBI error in object
by perlCrazy (Monk) on Jul 19, 2007 at 21:30 UTC
    Thanks for reply. If any error happens then I don't want to die the program. If any $DBI::error then store and then access that error via calling program.
    This is what I want to achieve. Just want to ensure that {ERROR_STR} should not have another error value if calling some other method.
      > If any error happens then I don't want to die the program.

      With RaiseError=0, and PrintError=1, that is just what will happen - the error message will be printed but the program will not die.

      If you run $obj->method1() and store its error message in $obj->{ERROR_MSG} and then run $obj->method2() which also stores its errors in that same place, yes you will overwrite the previous error. If you have that situation, you may need to store the errors in a hash with e.g. a timestamp as the key to the various errors. You might want to look at some of the modules used for DBI logging and tracing.

        Thanks.
        some limitations are here : I am passing the $dbh as handle to this module. so basically DBI::Connect method is getting called from some other place. like this:
        my $obj = module->new($dbh); $obj->getDDL(); $obj->method2();
        Any other problem did you see in getDDL method, sicne I am storing the value from $DBI::error str.