Dear Friends. This is the script that running in for squid redirector program. From the list I got lots of help to properly coding it. But unfortunately that problem is stil there . Problem is after some times ( After 8-10 hours) , that redirect url doesn't functioning properly. Getting hang or crached. Meanwhile i checked the database status also .database is up and running.
Can somebody help me please ? where is the problem ? in the logic of the code or some where else ? #!/usr/bin/perl use DBI; use strict; use warnings; ## no buffered output, auto flush $|=1; my $dbh = DBI->connect("dbi:mysql:#####;localhost","####","####") || "Error Opening DataBase: $DBI::errstr\n"; if (!$dbh->err()) { while (<STDIN>) { chomp; my ($url, $x, $####) = split; ($###) = $### =~ /([0-9.]+)/; my $query = "SELECT * from ###### where ###### = '" . $#### ."' order by ###### desc"; my $sth = $dbh->prepare($query); $sth->execute() or die "Unable to call execute $!\n\n"; my ($####, $#####); next unless my $ref = $sth->fetchrow_hashref; $##### = $ref->{'#####'}; $#### = $ref->{'####}; if (!($url =~ m#######)) { if ($url =~ m#\?#) { $url .= "&#####=" . $##### . "-" . $#### . "-" . $#####; } else { $url .= "?#####=" . $##### . "-" . $### . "-" . $#####; } print $url."\n"; } else { print "\n"; } } }else { print "\n"; } my $sth->finish(); $dbh->disconnect(); Thank you Luke. ----- Original Message ---- From: Rob Dixon <[EMAIL PROTECTED]> To: Perl <beginners@perl.org> Cc: luke devon <[EMAIL PROTECTED]> Sent: Monday, July 14, 2008 23:27:21 Subject: Re: Perl script doesnt behave well luke devon wrote: > > I am using perl script to handle some function of squid redirector program . > Actually its working fine. But after some time , that functions goes off. > That's meant VALUE-A doesnt comes in to the request. > > I checked the DB , it also fine. > CPU also nothing > > Can some body help me please ? > > > > #!/usr/bin/perl > use DBI; > use strict; > use warnings; > > # no buffered output, auto flush > $|=1; > > my ($dbh,$sth,$dbargs,$VALUE-A,$VALUE-B,$query); It is best to declare variables at their point of first use, unless a greater scope is necessary, as for $VALUE-A and $VALUE-B, for which see below. > $dbh = DBI->connect("dbi:mysql:List;localhost","root","") || "Error Opening > DataBase: $DBI::errstr\n"; my $dbh = DBI->connect("dbi:mysql:List;localhost","root","") or die "Error Opening DataBase: $DBI::errstr" > if (!$dbh->err()) { If you test the success of the connect, above, then this test will always succeed and there is no need for it. In any case if there is a problem then $dbh will not be a valid database handle and so won't have an err method. > while (<STDIN>) { > chomp; > my ($url, $x, $ip) = split(/ /); my ($url, $x, $ip) = split; is better. > $ip = substr($ip, 0, (length($ip)-2)); Having read your previous posts about how to extract an IP address from a string, I believe this should be written ($ip) = $ip =~ /([0-9.]+)/; and may be the source of your problem if there are not always two characters of junk data after the IP address. > $query = "SELECT * from ACCOUNT where someField = '" . $ip ."' order > by xxx_yyy desc"; > $sth = $dbh->prepare($query); > $sth->execute(); my $query = "SELECT * from ACCOUNT where someField = ? order by xxx_yyy desc"; my $sth = $dbh->prepare($query) or die $dbh->errstr; $sth->execute($ip) or die $dbh->errstr; The scalar variables $VALUE-A and $VALUE-B should also be declared here, and ideally have more descriptive names. my ($VALUE-A, $VALUE-B); > if (my $ref = $sth->fetchrow_hashref()) { > $VALUE-A = $ref->{'CallingStationId'}; > $VALUE-B = $ref->{'AcctSessionId'}; > > }else{ > $VALUE-A = "NA"; > } At this point you may have a value of 'NA' for $VALUE-A and $VALUE-B could be either undefined or, worse, have a value left over from the previous execution of the read loop. I think you should just write next unless my $ref = $sth->fetchrow_hashref; $VALUE-A = $ref->{'CallingStationId'}; $VALUE-B = $ref->{'AcctSessionId'}; > if (!($url =~ m#xxxyyyy#)) { > if ($url =~ m#\?#) { > $url .= "&xxxyyyy=" . $VALUE-A . "-" . $ip . "-" . $VALUE-B; > } else { > $url .= "?xxxyyyy=" . $VALUE-A . "-" . $ip . "-" . $VALUE-B; > } > print $url."\n"; > } else { > print "\n"; > } > } > }else { > print "\n"; It seems appropriate to do something more than just print a blank line if your connection to the database failed. > } > $sth->finish(); > $dbh->commit(); > > $dbh->disconnect(); HTH, Rob -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/ Send instant messages to your online friends http://uk.messenger.yahoo.com