CGI连接数据库的方法详细说明
毫无疑问,当今Web程序设计中最吸引人而且最复杂的当然就是web数据库程序了。平心而论,其复杂高深的程度决不是你们可以想象得到的。我们先来看看其中涉及到的几个方面的问题:
1.最基本的html设计
2.CGI程序编写调试
3.网络管理和客户协调
4.数据库编写
5.客户/服务体系程序编写
另外你还得不时地同你的客户进行斗争,以取得他们对你工作的认同。因此编写一个大型WEB数据库,是综合素质的考验。
笔者自问尚不完全具备以上的能力,但有幸曾参加过几个web数据库的开发,算是具备了初步的经验吧。这里给大家分享,也算是感谢各位对这个断断续续的教程的总结吧。
一 数据库选择
从一般情况来看,使用web数据库往往是要解决数据的归纳、索引和维护的问题。我们一般选择最流行的关系型数据库,比如NT下的sql,win95和nt下的Access,NT下的sybase,unix下的msql等等。当然还有Oracle、FileMaker PRO、Paradox等等。这些都是很流行的Sql数据库。Sql给数据管理提供了一个标准而坚实的接口,它对数据库操作饿所有函数必需在数据库语言中实现。这种函数包括:数据对象的创建、插入数据和数据修改等。对于数据量不大的小型数据库,一般使用access。
二 接口程序
虽然我们可以直接编写WEB的CGI接口,但是那是工作量巨大且麻烦异常的工作。为了减轻开发者的负担,数据库程序员为我们编写了许多可以直接使用的接口程序,配合不同的数据库。下面就是一些十分常用的接口程序:
1. DB2WWW
http://www.software.ibm.com/data/db2/db2wfac2.html
这是一个用于和IBM DB2数据库进行连接的工具。在HTTP服务器中,这种工具将HTML文件和SQL命令作为宏文件存储,然后,DB2WWW在接受到浏览器请求后就处理这些宏文件。
2. dbCGI
http://www.progress.com/webtools.html
这个工具通过在html文件中内置SQL语句来实现和数据库的连接。适用于Progress,Sybase,Oracle,Informix,Ingres和ODBC。下面是一个典型的dbCGI程序代码:
以下为引用的内容: <title>dbCGI test</title> <sql init> INFORMIXDIR=/usr/informixdir SQLEXEC=/usr/informix/sqlturbo TBCONFIG=tbconfig </sql> <sql connect connl> <DATABASE=stores> <sql> <sql format> % [! 8:<h1>%8d</h1>%] .... </sql> <sql query connl> selet * from customer order by date,city,zipcode </sql> <sql disconect connl> </sql> <sql uninit> </sql> |
这个工具通过<sql>标签和%转意字符来把sql语句放置在html语句内。
3 Genera
http://gdbdoc.gdb.org/letovsky/genera/general.html
这个是sybase数据库系统的网关。它通过在文本文件中加入特定的语句来和数据库进行连接。
4 WebDBC
http://www.ndev.com
以windows NT为平台,可以访问所有对odbc兼容的数据库。
5 A-Xorion
http://www.clark.net/infouser/endidc.html
他是一个CGI网关,它可以访问大多数的PC机数据库。它以Windows3.1/95/NT为平台。数据库为Ms Access2.0。
三 编程语言
上面介绍的是一些常用的接口程序,它们需要Server的配合才能正常工作。当然如果是很小的数据库程序,不需要使用如此复杂的数据库接口程序。用C,Perl,VB等等,写成CGI程序,在CGI程序内调用数据库。虽然速度方面不是很快,但绝对是非常简单的。
最后的例子:
最后,我准备以一个例子来结束这个教程。
环境:
这是一个非常简单的WEB应用程序。如果你要运行这个程序,也许你得化些时间来配置自己的系统。在这个例子里,CGI程序由Perl5来编写,后台数据库使用sybase system 10,Sybperl用于建立脚本和数据库之间的通信,用其他的CGI后台数据库接口程序也可以。
CGI程序:
以下为引用的内容: <head> <hr> |
Perl脚本:
以下为引用的内容: #!/usr/local/bin/perl require"cgi-lib.pl"; &ReadParse(* input); $mc_fname=$input{'c_fname'}; $mc_lname=$input{'c_lname'}; $mc_add1=$input{'c_add1'}; $mc_add2=$input{'c_add2'}; $mc_city=$input{'c_city'}; $mc_state=$input{'c_state'}; $mc_zip=$input{'c_zip'}; $mc_phone=$input{'c_phone'}; $mc_fax=$input{'c_fax'}; $mc_email=$input{'c_email'}; $mc_package=$input{'c_package'}; $mc_ad=$input{'c_ad'}; |
print &PrintHeader;
以下为引用的内容: if (($mc_fname eq"")||(mc_lname eq "")||(mc_add1 eq "")||($mc_add2 eq "")||( |
use Sybase::DBlib;
以下为引用的内容: $dbh=Sybase::DBlib->dblogin('conf_user','123','DB-SERVER','REG'); $sqlcmd="insert into reg(c_fname,c_lanme,c_add1,c_add2,c_city,c_state,c_zip, c_phone,c_fax,c_email,c_package,c_ad)"; $sqlcmd=$sqlcmd."values(" print"<strong>Thank you.</strong>Your registration has been submitted.You should receive you packet shourtly in the mail."; } |