标准函数:avg(),count(),sum(),max(),min() 括号内为字段名
技巧:
vote BETWEEN 7 AND 10 等同于vote>6 and vote<11
username IN ('Bill Gates','President Clinton')只取其中之一
CONVERT(CHAR(8),price) 将其它类型的数据转型为指定长度的字符型
site_name LIKE '[A-M]%' 则只取首字符为A至M的记录
site_name LIKE '[ABC]%' 则只取首字符为A或B或C的记录
site_name LIKE '[C-FY]%' 则只取首字符为C至F或Y的记录
site_name LIKE '[^Y]%' 要得到那些名字不以Y开头的记录
site_name LIKE 'M_crosoft' 通过使用下划线字符(_),你可以匹配任何单个字符
如果你想匹配百分号或下划线字符本身,你需要把它们括在方括号中。如果你想匹配连字
符(-),应把它指定为方括号中的第一个字符。如果你想匹配方括号,应把它们也括在方括号中。
TTRIM()和LTRIM(),可以用来从字符串中剪掉空格。函数LTRIM()去除应该字符串前面的
所有空格;函数RTRIM()去除一个字符串尾部的所有空格。
日期型常数应形式为 #12/25/2000 11:25:32#
<center><font color=red>(C)Copyright by zengh 1999-2000</font></center>
</pre>
</body></html>
EOF
}
sub stat {
@tables=sort $db->TableList;
print "<html><body><center><h4>数据表
(共$#tables个)</h4></center><hr>";
$yes=0;
foreach (@tables) {
if ($_ ne 'log') {
print "<a href=$cgiurl?job=look&dsn=$DSN&sql=select%20top%20100%20*%20%20from%20$_ target=look>$_</a>
\n";
}else{$yes=1;}
}
if ($yes=0) {#如果不存在LOG这个表则建立
$sql="create table log (usedate datetime,host char(20),sqlcommand char(255))";
if ($db->Sql($sql)) {
print "sql错误:$sql\n
";
$db->DumpError();
$db->Close();
exit;
}
}
print "<hr>点击表名显示其记录<hr>";
print "</body></html>";
}
sub look{
@tables=sort $db->TableList;
if (!$sql) {
$table=@tables[0];
$table=@tables[1] if ($#tables>=1 and @tables[0] eq "log");
$sql="select top 100 * from ".$table;
}
$sql=~s / eq /=/g;
$sql=~s / ne /<>/g;
$sql=~s / lt /</g;
$sql=~s / gt />/g;
$sql=~s / le /<=/g;
$sql=~s / ge />=/g;
if ($db->Sql($sql)) {
print "sql错误:$sql\n
";
$db->DumpError();
$db->Close();
exit;
}
if (! ($sql=~/select|into|/i)) {
print "$sql语句执行成功!!";
$db->Close();
exit;
}
@fieldname=$db->FieldNames();
print "<html><body><center><h2>返回状态情况<h2></center><hr>";
print "<table width=100% border=1><tr><td>no.</td>";
foreach (@fieldname) {
print "<td>$_</td>";
}
print "</tr>";
$i=0;
while ($db->FetchRow()){
$i++;
%fieldmemo=$db->DataHash;
print "<tr><td>$i</td>";
foreach (@fieldname) {
print "<td>$fieldmemo{$_}</td> ";
}
print "</tr>";
}
print "</table>";
print "<hr>表属性";
print "<table border=1>";
my(%type) = $db->ColAttributes($db->SQL_COLUMN_TYPE);
my(%len) = $db->ColAttributes($db->SQL_COLUMN_LENGTH);
my(%null) = $db->ColAttributes($db->SQL_COLUMN_NULLABLE);
foreach $field (sort @fieldname) {
if ($type{$field}==12) {$fieldtype="文本";}
elsif ($type{$field}==-1){$fieldtype="备注/超级链接";}
elsif ($type{$field}==4){$fieldtype="数字/自动编号";}
elsif ($type{$field}==11){$fieldtype="日期/时间";}
elsif ($type{$field}==2){$fieldtype="货币";}
elsif ($type{$field}==-7){$fieldtype="是/否";}
elsif ($type{$field}==-4){$fieldtype="OLE对象";}
elsif ($type{$field}==1){$fieldtype="文本";}
else{$fieldtype=$type{$field};}
print "<TR><TD>$field</td><TD>$fieldtype</td><TD>$len{$field}</td><TD></tr>";
}
print "</table>";
print "</body></html>";
if ($sql ne "select usedate as 时间,host as 使用者,sqlcommand as SQL命令 from log order by usedate" and $sql !=~"select top 100 * from") {
$sql1="insert into log (usedate,host,sqlcommand) values ('$daten $timen','$userip','$sql')";
if ($db->Sql($sql1)) {
print "sql错误:$sql\n
";
$db->DumpError();
$db->Close();
exit;
}
}
}
##########
#subs program
##########
sub set_var {
$job =&get_var('job' ,'\n|‖');
$sql =&get_var('sql' ,'\n');
$DSN =&get_var('dsn' ,'\n');
$userip=$ENV{'REMOTE_ADDR'};
($secn,$minn,$hourn,$dayn,$monn,$yearn,$weekn,$yeardayn,$isdst) = localtime(time+(3600*$time_miss));
$monn=$monn+1;
if ($monn<10) {$monn="0$monn";}
if ($dayn<10) {$dayn="0$dayn";}
if ($hourn<10) {$hourn="0$hourn";}
if ($minn<10) {$minn="0$minn";}
if ($secn<10) {$secn="0$secn";}
$yearn+=1900;
$daten="$monn/$dayn/$yearn";
$timen="$hourn\:$minn\:$secn";
}