--- 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;
+}