in reply to keep database records after select

I think that besides the problem already mentioned by ikegami there is perhaps an additional error in your code since you have the correct data inside your subroutine, but none outside of it. The usual symptom of the problem indicated by ikegami is having lots of the same records in your data-structure.

Perhaps you can show us some code to review?

CountZero

A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

Replies are listed 'Best First'.
Re^2: keep database records after select
by marc724 (Initiate) on Mar 14, 2008 at 22:14 UTC
    Thank you for responding and offering help. here's the code that doesn't work (in all of its ugliness.) and that is followed by what I think is just a cleaner version that DOES work??? I don't know why (could it be the SWITCH or the way I get the arguments to the subroutine???
    use Switch; use DBI; sub rec_exists; my (@retRows, @row, @tmp, $retRecs); while ($line = <>) { chomp($line); if ($line eq "q") { goto Exit; } else { $retRecs = rec_exists($line,\@retRows); } $tmp = @retRows[0]; @row = @$tmp; ($nKey, $fN, $lN, $bN, $hN, $mN) = @row; print "$nKey,$fN, $lN, $bN, $hN, $mN\n"; } Exit: exit(); sub rec_exists { my ($searchType,$searchParm,$retArrayRef) = split(/,/,@_[0]); my $dbh = DBI->connect("DBI:mysql:database=aaaaas;host=localhost", +"bbbbbb","cccccccccc",{'RaiseError' => 1}); my ($found, @row, @rows, $nKey, $sth); $rowRef; @rows = (); switch($searchType) { case "1" { # search using the nKey $nKey = $searchParm; chomp($nKey); $nKey =~ s/^\s+//; $nKey =~ s/\s+$//; $sth = $dbh->prepare("Select * from sContacts where nKey like + '$nKey%'"); $sth->execute(); $found = 0; while ( $rowRef = $sth->fetchrow_arrayref ){ $retArrayRef->[$found] = [ @$rowRef ]; $found++; } } } $sth->finish; $dbh->disconnect; return $found; }
    ====================== Now here's the stuff that does work
    use Switch; use DBI; my (@retRows,$retRecs, $searchKey); $searchKey = 'marcC'; $retRecs = test_exists($searchKey,\@retRows); print "returned $retRecs\n"; $tmp = @retRows[0]; print "@$tmp\n"; exit(); sub test_exists { my ($searchKey, $retRowsRef) = @_; my ($retArrayRef, $found); my $dbh = DBI->connect("DBI:mysql:database=aaaaa;host=localhost"," +bbbbbb","ccccccccc",{'RaiseError' => 1}); my $sth = $dbh->prepare("Select * from sContacts where nKey like +'$searchKey%'"); $sth->execute(); $found = 0; while ( $retArrayRef = $sth->fetchrow_arrayref ){ $retRowsRef->[$found] = [ @$retArrayRef ]; $found++; } $sth->finish; $dbh->disconnect; return $found; }