in reply to DBI Problem

There is just so much you are not telling us here

In particular, what are you doing inside ExecuteQuery that involves a CGI::Session object? It does not seem to be initialized properly.

Replies are listed 'Best First'.
Re^2: DBI Problem
by tultalk (Monk) on Sep 29, 2017 at 00:14 UTC

    As I said there are two calls to executequery in the same sub routine. The first returns the correct response while the second fails with the error posted. open connection returns the dbi/dsn correctly

    Open Connection-returning database handle: 'DBI::db=HASH(0x1e02880)' d +sn: 'dbi:mysql:database=jalamior_assoc_mgr;host=localhost' at /home/j +alamior/www/httpsdocs/cgi-bin/lib/perl/manageusers.pm line 152.

    Makes no sense to me why one should be Ok and the other fail. That is why I am here. Seems like a self contained problem to me.

    sub ExecuteQuery { my ($SQL) = @_; my $sth = $dbh->prepare($SQL) || ErrorMessage($SQL); $sth->execute() || ErrorMessage($SQL); return $sth; }

      Hello tultalk,

      You need to debug step by step your operations. Insert errstr on prepare and execute and see the output. I do not think so the way that you are using it currently is working correctly. Sample of code untested:

      my $sth = $dbh->prepare($SQL) or die $dbh->errstr; $sth->execute() or die $dbh->errstr; $dbh->commit or die $dbh->errstr;

      See also commit.

      You need also to check your call fetchrow_array since you are jumping from one note to the other. Sample of code untested:

      while (($tsid, $userid) = $sth->fetchrow_array) { print "$tsid: $userid\n"; } # check for problems which may have terminated the fetch early die $sth->errstr if $sth->err;

      Hope this helps, BR.

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

        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.

      Why are you so sure the error is at "note 2" rather than $session = OpenSession($dbh,$tsid);

        I should have said the problem manifests itself at Note 2.

        my $userid = $session->param("user_id"); my $username = $session->param("username");

        Returns the correct information from the session. $session = OpenSession($dbh,$tsid);

      Seems like a self contained problem to me.

      It would be if you didn't use a global $dbh in your subroutine.

      Where does the string "(in cleanup)" appear in your code. Is that the name of another subroutine ?

      poj

        Not in my code. Message in captured error file from system