I'm using the vec feature to create a bit vector and I want to write it to a
mysql database. When this did not work using a string field, I tried tiny
blob. It is writing some bits. When I get results back, they are not what I
started with.

 

Here is my code. Can someone tell me what I am doing wrong? Here is what the
code below prints:

 

573 They are not equal:
$bvKeyWord2=0,1,2,5,10,11,12,14,20,21,26,27,32,33,34,37 $bvKeyWords=10,11

 

Thanks,

Siegfried

 

  my @nRoleID; # array of integers

  my $bvKeyWords = "";

  vec($bvKeyWords,$_,1)=1 foreach @nRoleID;

 

# write to database

  my $uUpdate = "UPDATE  jobposting SET bvKeyWords = ? WHERE id = ?";

  {my $sth = $dbh->prepare ( $uUpdate );

  $sth->bind_param(1, $dbh->quote($bvKeyWords));

  $sth->bind_param(2, $fkJobPosting[0]);

  die "No sth: " . $dbh->errstr unless $sth; 

  $sth->execute || die __LINE__." Failed: '$uUpdate' ". $sth->errstr; }

 

# read from database

  my $sSelect = "SELECT bvKeyWords FROM  jobposting  WHERE id = ?";

  { my $sth = $dbh->prepare ( $sSelect );

  die "No sth: " . $dbh->errstr unless $sth; 

  $sth->execute($fkJobPosting[0]) || die __LINE__." Failed: '$sSelect' ".
$sth->errstr;

  my $row;

  while ( $row = $sth->fetch ) {

    my ($bvKeyWord2) = @$row;

    if ($bvKeyWord2 eq $bvKeyWords){

      print __LINE__." Hurray, they are equal: \$bvKeyWords\n";

    } else{

      print __LINE__." They are not equal: \$bvKeyWord2=";

      my @ids;

      for(0..300){

        push @ids, $_ if vec($bvKeyWord2,$_,1);

      }

      print join(",",@ids)." \$bvKeyWords=";

      @ids=();

      for(0..300){

        push @ids, $_ if vec($bvKeyWords,$_,1);

      }

      print join(",",@ids)."\n";

 

    }

Reply via email to