[ 来源: | 作者: | 时间:2007-07-16 | 收藏 | 推荐 ] 【大 中 小】
#!/usr/bin/perl
print "Content-type: text/html\n\n"; http://www.it55.com/
#setver
$http = "http://$ENV{'SERVER_NAME'}$server_port";
$cgiurl = "$http/cgi-bin/test4.pl"; #cgi的URL exp :http://ssl
($disk,$root,$script) =split(/\\/,__FILE__);
$filehead = "$disk\/$root\/$script"; #exp:d:/inetpub/cgi-bin
$allow_html = 0; # 1=允许使用html语法 0=no
$time_miss = +0; # Server时区调整 it55.com
#program
&get_form;
&set_var;
use Win32::ODBC;
#$DSN = "mdbtest" if (!$DSN);
$DSN = "DSN eq test;UID eq test;PWD eq test;" if (!$DSN); #i use sqlserver
$DSN1=$DSN;
$DSN=~s / eq /=/g;
$DSN1=~s / /%20/g;
#创建一个DSN文件头
my $db = Win32::ODBC->new($DSN);
#测试是否存在此DSN
if (! $db){
print "Failed to Connect $DSN\n";
Win32::ODBC::DumpError();
#如果不存在则退出程序
die;
}#else{print "联结正确!";exit;}
$DSN=$DSN1;
if ($job eq "look") {
&look;
$db->Close();
exit;
}elsif ($job eq "type"){
http://www.it55.com/
sub log{
$sql="select usedate as 时间,host as 使用者,sqlcommand as SQL命令 from log order by usedate";
&look;
} IT资讯之家 www.it55.com
sub help{
print <<"EOF";
<html><body>
<pre> vd;k;l www.it55.com rdfg
sql语句简介:
select [ALL|DISTINCT|DISTINCTROW|][TOP n ]字段列表|* from 表名
[where 条件]
[order by 字段名 ][DESC]]
[group by 字段名] IT资讯之家 www.it55.com
其中:条件 数字型 字段名 操作符 值(lt < ,gt >,eq =, le <=,ge >=,ne <>)
字符型 字段名 like '值' 如加%号为模糊条件
日期型 TO_CHAR(字段名,'YYYYMMDD HH24:MI:SS') > '20000120 09:01:00'
谓词 ALL 返回所有数据,默认值
DISTINCT 省略选择字段中包含重复数据的记录
DISTINCTROW 省略基于整个重复记录的数据,而不只是基于重复字段的数据。
TOP n 返回指定记录数
标头 用于代替字段名,语法: 字段名 as 标头
CREATE TABLE 表名(字段名 字段类型(长度)[,字段名 字段类型(长度)...])
drop table 表名 用途:删除表 注:删除后无法恢复
TRUNCATE TABLE 表名 用途:清除表中的所有数据但不删除这个表
ALTER TABLE 表名 ADD 字段名 字段类型 NULL
用途:给指定的表增加一个字段,注意:NULL参数是必须有的
INSERT INTO 表名 (字段列表) VALUES (字段值列表) 用途:增加记录,分隔用,分隔 vd;k;l www.it55.com rdfg
DELETE * from 表名 WHERE 条件 用途:删除符合条件的记录 注意:如不提供条件,将删除所有记录
update 表名 set 字段=字段值[,字段=字段值] where 条件
用途:更新符合条件的记录值,注意:如不提供条件将更新所有记录
SELECT *|字段列表 INTO 新表名 FROM 旧表名 用途:拷贝整个表或指定字段的表
sflj www.it55.com kg^&fgd
字段类型:
数据类型 存储大小 描述
BINARY 每个字符占一个字节 任何类型的数据都可存储在这种类型的字段中。不需数据转换(例如,转换到文本数据)。数据输入二进制字段的方式决定了它的输出方式。
BIT 1 个字节 Yes 和 No ,以及只包含这两个数值之一的字段。
BYTE 1 个字节 介于 0 到 255 之间的整型数。
COUNTER 4 个字节 每当有新记录添加至表中时,由 Microsoft Jet 数据库引擎自动增加数值。在 Microsoft Jet 数据库引擎中,此数值的数据类型为 Long。
CURRENCY 8 个字节 介于 ?-?922,337,203,685,477.5808 到 922,337,203,685,477.5807 之间的符号整数。
DATETIME
(清参阅 DOUBLE ) 8 个字节 介于 100 到 9999 年的日期或时间数值。
GUID 128 个位 用于远程过程调用的唯一识别数字。
SINGLE 4 个字节 单精度浮点数,负数范围是从 -3.402823E38 到 -1.401298E-45,正数从1.401298E-45 到 3.402823E38,和 0。
DOUBLE 8 个字节 双精度浮点数,负数范围是从 -1.79769313486232E308 到 -4.94065645841247E-324,正数从 4.94065645841247E-324 到 1.79769313486232E308,和 0。
标准函数: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()去除应该字符串前面的
<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)) { sflj www.it55.com kg^&fgd
print "sql错误:$sql\n
";
$db->DumpError();
$db->Close();
exit;
}
}
print "<hr>点击表名显示其记录<hr>"; it55.com
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++;
vd;k;l www.it55.com rdfg
免费资源www.it55.com
sub type{
print <<"EOF";
<html><body>
<FORM METHOD=POST ACTION="$cgiurl?job=look&dsn=$DSN" target="look">
SQL语句:<INPUT TYPE="text" NAME="sql" size=60>
<INPUT TYPE="submit" value="确定"><INPUT TYPE="reset" value="重写">
</FORM>
<a href=$cgiurl?job=stat&dsn=$DSN target="stat">刷性状态</a>-----
<a href=$cgiurl?job=help target="look">帮助</a>-----
<a href=$cgiurl?job=log&dsn=$DSN target="look">日志</a>
</body></html>
EOF
}
sub main {
print <<"EOF";
<html>
it55.com
it55.com
45398 www.it55.com it55学习IT知识,享受IT生活 4dfkjn
##########
#subs program
##########
sub set_var {
$job =&get_var('job' ,'\n|‖');
$sql =&get_var('sql' ,'\n');
$DSN =&get_var('dsn' ,'\n');
$userip=$ENV{'REMOTE_ADDR'}; http://www.it55.com/
($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";
}
IT资讯之家 www.it55.com
############
sub get_form {
@querys = split(/&/, $ENV{'QUERY_STRING'});
foreach (@querys) {
($name,$value) = split(/=/, $_);
$value = &decode($value);
$value = &filterhtml($value);
&setvaluetoform($name, $value);
} 免费资源www.it55.com
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach (@pairs) {
($name, $value) = split(/=/, $_);
$value = &decode($value);
$value = &filterhtml($value);
&setvaluetoform($name, $value);
} 免费资源www.it55.com
@cookies = split(/; /, $ENV{HTTP_COOKIE});
foreach $cookies (@cookies) {
($name, $value) = split(/=/, $cookies);
$value = &decode($value);
$value = &filterhtml($value);
&setvaluetoform($name, $value);
}
}
############
sub decode {
local($return)=$_[0];
$return =~ tr/+/ /;
$return =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
return $return;
}
##########
sub filterhtml {
local($return)=$_[0];
$return =~ s/<!--(.|\n)*-->//g;
if ($allow_html != 1) {
$return =~s/<([>]|\n)*>//g;
}
return $return;
vd;k;l www.it55.com rdfg
(编辑:IT资讯之家 www.it55.com)