--- loncom/lonsql 2000/06/26 02:42:42 1.2 +++ loncom/lonsql 2000/07/02 04:01:56 1.3 @@ -168,7 +168,7 @@ sub make_new_child { #open database handle # making dbh global to avoid garbage collector unless ( - $dbh = DBI->connect("DBI:mysql:loncapa","www","newmysql",{ RaiseError =>1,}) + $dbh = DBI->connect("DBI:mysql:loncapa","www","newmysql",{ RaiseError =>0,PrintError=>0}) ) { my $st=120+int(rand(240)); &logthis("WARNING: Couldn't connect to database ($st secs): $@"); @@ -189,7 +189,8 @@ sub make_new_child { my $userinput = <$client>; chomp($userinput); - my ($conserver,$query)=split(/&/,$userinput); + my ($conserver,$querytmp)=split(/&/,$userinput); + my $query=unescape($querytmp); #send query id which is pid_unixdatetime_runningcounter $queryid = $thisserver; @@ -199,15 +200,18 @@ sub make_new_child { print $client "$queryid\n"; #prepare and execute the query -# my $sth = $dbh->prepare($query); -# unless ($sth->execute()) -# { -# &logthis( -# "WARNING: Could not retrieve from database: $@" -# ); -# } -# my $result=$sth->fetch(???); - $result="123"; + my $sth = $dbh->prepare($query); + my $result; + unless ($sth->execute()) + { + &logthis("WARNING: Could not retrieve from database: $@"); + $result=""; + } + else { + my $r1=$sth->fetchall_arrayref; + my @r2; map {my $a=$_; my @b=map {escape($_)} @$a; push @r2,join(",", @b)} (@$r1); + $result=join("&",@r2) . "\n"; + } &reply("queryreply:$queryid:$result",$conserver); } @@ -262,3 +266,18 @@ sub reply { return $answer; } +# -------------------------------------------------------- Escape Special Chars + +sub escape { + my $str=shift; + $str =~ s/(\W)/"%".unpack('H2',$1)/eg; + return $str; +} + +# ----------------------------------------------------- Un-Escape Special Chars + +sub unescape { + my $str=shift; + $str =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; + return $str; +}