haxpak |
03-01-2009 11:15 AM |
perl networking and mysql error
hi
i am getting error as:
Use of uninitialized value in concatenation (.) or string at ./iothread.pl line 86, <GEN1> line 1.
during runtime
and
the output looks like this:
[QUOTE]
Multiplex server running on port 4444...
Created thread 1 for new client 10.168.1.2:3233
Use of uninitialized value $_ in scalar chomp at ./iothread.pl line 66, <GEN1> line 1.
1005874632400418
1234
login
Use of uninitialized value in concatenation (.) or string at ./iothread.pl line 86, <GEN1> line 1.
10895
Thread 1 terminated abnormally: Not a CODE reference at ./iothread.pl line 87, <GEN1> line 1.
[QUOTE]
i am not concatenating anything here??
Code:
#!/usr/bin/perl
# iothreadserv.pl
use warnings;
use strict;
use integer;
BEGIN
{
use Config;
die "No thread support!\n" unless $Config{'usethreads'};
}
use Thread;
use IO::Socket;
use DBI;
use DBD::mysql;
# Autoflushing on
$| = 1;
my $port = 4444;
my $server = IO::Socket->new(
Domain => PF_INET,
Proto => 'tcp',
LocalPort => $port,
Listen => SOMAXCONN,
Reuse => 1,
);
die "Bind failed: $!\n" unless $server;
print "Multiplex server running on port $port...\n";
while (my $connection = $server->accept)
{
my $name = $connection->peerhost;
my $port = $connection->peerport;
my $thread = new Thread(\&connection, $connection, $name, $port);
print "Created thread ",$thread->tid," for new client $name:$port\n";
$thread->detach;
}
exit;
# child thread - handle connection
sub connection
{
my ($connection, $name, $port) = @_;
$connection->autoflush(1);
#############################my sql connect###############################
my $platform = "mysql";
my $database = "project";
#my $host = "localhost";
#my $port = "3306";
my $user = "root";
my $pw = "";
# DATA SOURCE NAME
my $dsn = "dbi:mysql:$database";
# PERL DBI CONNECT
my $dbh = DBI->connect($dsn, $user, $pw) or die "cannot connect to database";
#######################################################################33
print $connection "You're connected to the server!\n";
my $client = <$connection>;
chomp; # ($client);
#while (<$connection>) {
if ($client =~ /::login/)
{
print $connection "Login Initiated\n";
my $rand = int(rand(100000));
print $connection "Your rand number : $rand";
#$client =~ s/([\$\@\\])/\\$1/mg; ##escape all $, @ and \
#$client = quotemeta $client;
my @recv_string = split /::/ , $client;
foreach (@recv_string)
{
print "$_ \n";
}
#next line injection possible !! REMOVE IT!!
my $sth = $dbh->prepare("select * from Temp_ID where TEMP_NO = $recv_string[0]");
$sth->execute();
#take only one output row
my $ref = $sth->fetchrow_hashref();
# $sth->finish();
print "$ref->{'Temp_ID'} $ref->{'CARD_ID'}\n";
$sth = $dbh->("select PIN from Cards where Card_ID = $ref->{CARD_ID}");
$sth->execute();
# $sth->finish();
my $ref2 = $sth->fetchrow_hashref();
if ($recv_string[1] eq $ref2->{PIN})
{
print $connection "PIN verified OK";
}
}
if ($client =~ /:logout/)
{
print $connection "You are being Logged OUT\n";
}
print "Client $name:$port says: $client \n";
print $connection "Message received OK\n";
# }
$dbh->disconnect;
$connection->shutdown(SHUT_RDWR);
}
|