I am working on a script to parse a series of text files and insert
or update this data as appropriate into a couple of database tables.  I am
stuck at a point with a couple of errors that are just confusing the hell
out of me.  I keep going around in circles and I must be missing something
here.  Please let me know if you can spot anything in this piece of code.
This is a pair of subroutines from the script, and the place where the
problems exist are in the fs_db_pop subroutine.  Here is the code with line
numbers, and then the output/error messages.

87  sub fs_db_pop {
    88    $server = $name;
    89    my $test2 = $dbh2->prepare("SELECT id FROM fsref WHERE server
='$serve
r' AND fs_name = '$fs_name'");
    90    $test2->execute();
    91
    92    $rows2 = $test2->rows();
    93    print "Number of matching rows:  $rows2 \n";
    94    if ($rows2 == 1) {
    95      my $vals = $test2->fetchrow_hashref ('NAME_lc');
    96      my $id = $vals->{id};
    97      my $query = $dbh2->prepare("SELECT * FROM fsdata WHERE id
='$id'");
    98      $query->execute();
    99      while (my $ref2 = $query->fetchrow_hashref ('NAME_lc')) {
   100        undef $set2;
   101        foreach my $key2 (keys %$ref2) {
   102          unless ($$key2 eq $ref2->{$key2}) {
   103            $set2 .= " , " if $set2;
   104            $set2 .= $key2 . "=\'$$key2\'";
   105          }
   106      $query->finish();
   107        }
   108        if ($set2) {
   109          print "Entry found in database.  Updating information for
$id. \
n";
   110          my $sql2 = "UPDATE fsdata SET $set2 WHERE id = '$id'";
   111          my $sth2 = $dbh2->prepare(qq{$sql2});
   112          $sth2->execute();
   113          $sth2->finish();
   114        }
   115      }
   116    } else {
   117    undef $id;
   118    $dbh2->do("INSERT INTO fsref VALUES('$id','$server','$fs_name')")
or p
rint "Error updating fsref table:  ", $dbh2->errstr, "\n";
   119    $id = $dbh2->{mysql_insertid};
   120    $dbh2->do("INSERT INTO fsdata
VALUES('$id','$lvol','$stripe_num','$str
ipe_size','$size','$owner','$group','$export')") or print "Error updating
fsdata
 table: ", $dbh2->errstr, "\n";
   121    print "Entry not found in database.  Adding information for $id.
\n";
   122    }
   123    $test2->finish();
   124  }
   125
   126  sub filesystems {
   127    # $fs_index = (split /\[|\]/)[1];
   128    @fs_data = split(/:\s+/);
   129    chomp($fs_data[1]);
   130    # print "Test:  $fs_data[0] \n";
   131    if ($fs_data[0] =~ /^Filesystem/) {
   132      $fs_name = $fs_data[1];
   133    } elsif ($fs_data[0] =~ /^Owner/) {
   134      ($owner, $group) = split /\s+/, $fs_data[1], 2;
   135    } elsif ($fs_data[0] =~ /^LvolN/) {
   136      $lvol = $fs_data[1];
   137    } elsif ($fs_data[0] =~ /^Exported/) {
   138      $export = $fs_data[1];
   139    } elsif ($fs_data[0] =~ /^LvolS\[/) {
   140      $size = $fs_data[1];
   141    } elsif ($fs_data[0] =~ /^LvolStN/) {
   142      $stripe_num = $fs_data[1];
   143      print "$stripe_num \n";
   144    } elsif ($fs_data[0] =~ /^LvolStS/) {
   145      $stripe_size = $fs_data[1];
   146      fs_db_pop();
   147      undef @fs_data;
   148    }
   149  }

        I mainly include the second subroutine because that is where the
parsing of the data from the text file occurs.  It is working fine, but I
thought it might be helpful to see it also.  The rest of the script mainly
sets up the database connection strings, and handles adding/updating a
seperate database table with other information.  Here is the output of the
script:

Number of matching rows:  1 
Entry found in database.  Updating information for 116. 
DBD::mysql::st execute failed: You have an error in your SQL syntax near
'group=
'sys ' , lvol='/dev/vg02/lvol2 ' , stripe_num='4 ' , id='377140311' , size'
at l
ine 1 at ./sys_db_update-dev.pl line 112, <INV> line 1145.
DBD::mysql::st fetchrow_hashref failed: fetch() without execute() at
./sys_db_up
date-dev.pl line 99, <INV> line 1145.
0  
Number of matching rows:  1 
Entry found in database.  Updating information for 117. 
DBD::mysql::st execute failed: You have an error in your SQL syntax near
'group=
'root ' , lvol='/dev/vg00/home_tmp ' , stripe_num='0 ' , id='377140311' , '
at l
ine 1 at ./sys_db_update-dev.pl line 112, <INV> line 1153.
DBD::mysql::st fetchrow_hashref failed: fetch() without execute() at
./sys_db_up
date-dev.pl line 99, <INV> line 1153.
pyro found in database.  Updating information for pyro. 

        Hopefully this is enough information for someone to help figure out
what I am doing wrong here.  Thanks in advance for the help.

Scott Nipp
Phone:  (214) 858-1289
E-mail:  [EMAIL PROTECTED]
Web:  http:\\ldsa.sbcld.sbc.com


Reply via email to