in reply to Re^3: DBI Problem
in thread DBI Problem

You question pointed me at this

625 warn("Locating existing user data succeded: SID '$tsid'"); 626 $session = OpenSession($dbh,$tsid); 627 my $userid = $session->param("user_id"); 628 my $username = $session->param("username"); 629 warn("userid: '$userid' username: '$username'");

Line 629 shows correct parameters recovered. I can't see where substituting your suggested code would do anything different. Returning the correct rsults indicates no error correct?

Fri Sep 29 05:59:35 2017 manage_users.cgi: userid: '428' username: 'jala428' at /home/jalamior/www/httpsdocs/cgi-bin/lib/perl/manageusers.pm line 629.

SQL Statement: 'update users set password = 'briddle' where id = '428'' at /home/jalamior/www/httpsdocs/cgi-bin/lib/perl/manageusers.pm line 656.

Replies are listed 'Best First'.
Re^5: DBI Problem
by thanos1983 (Parson) on Sep 29, 2017 at 12:05 UTC

    Hello tultalk,

    Regarding: I can't see where substituting your suggested code would do anything different. Returning the correct rsults indicates no error correct?.

    Yes and no, Yes because in theory if you get the same output should prove that your script is crashing at another point. No because if you use the die methods it will clearly show the line that the script died and the also the reason (if you print error message).

    If I was you, I would debug each and single step of the function / method that you are adding / updating. Unfortunately there is no easy way out of this. You need to insert a die methods.

    As an alternative you can use something like:

    my $dbh = DBI->connect("dbi:DriverName:db_name", $user, $password, { RaiseError => 1, AutoCommit => 0 });

    By using RaiseError you will avoid needing to check each call it will die by default on each wrong call.

    From the DBI/RaiseError documentation:

    Type: boolean, inherited The RaiseError attribute can be used to force errors to raise exceptio +ns rather than simply return error codes in the normal way. It is "of +f" by default. When set "on", any method which results in an error wi +ll cause the DBI to effectively do a die("$class $method failed: $DBI +::errstr"), where $class is the driver class and $method is the name +of the method that failed. E.g., DBD::Oracle::db prepare failed: ... error text here ...

    Hope this helps, BR.

    Seeking for Perl wisdom...on the process of learning...not there...yet!

      Tried that

      warn("Open Connection-JustBefore opening connection "); my $localtimenow = localtime(Now()); $dbh = DBI->connect($dsn,$sql_username,$sql_password ,{ RaiseError => 1, AutoCommit => 0 });

      Checked error logs and nothing

        Hello tultalk,

        By nothing happened, I assume you mean that nothing changed? Are you getting the same error when you execute your code?

        BR, Thanos

        Seeking for Perl wisdom...on the process of learning...not there...yet!