Sep 25

[原]一个使用ASP连接MySQL的留言版 雷阵雨

linuxing , 17:11 , 编程 » ASP , 评论(1) , 引用(0) , 阅读(24130) , Via 本站原创 | |
   前面描述了在红旗Linux上如何搭建运行ASP语言的环境,也对MS SQL和Mysql两数据库的连接方式进行了说明。下面用一个常见的留言版源码,来看看实际环境中,Linux下的ASP代码如何编写,以及要注意那些地方。
一、系统环境
原代码:
Z-BLOG 留言本 v1.0
引用
所支持的流行功能有:防止重复发贴功能;长英文的断行功能;斑竹回复功能;留言搜索功能;支持分页,可修改每页显示留言数。
运行环境:Windows 2000 + IIS 5.0 + Access .mdb数据库

新代码:
引用
功能相同,但运行环境可基于Windows+Linux或纯Linux平台。
Linux:红旗 DC Server 5.0,Mysql 4.1

Windows:MSSQL 2000

二、数据库部分
原留言版可从下面下载:

因iASP并不能支持Access数据库的连接。所以,我第一步要做的,就是把Access数据库改为MS SQL或Mysql。以Mysql为例。
1、Mysql数据库
引用

CREATE DATABASE gb;
USE gb;
CREATE TABLE `guestbook` (
 `ID` int(3) NOT NULL auto_increment,
 `addtime` datetime default NULL,
 `name` varchar(100) default NULL,
 `ip` varchar(100) default NULL,
 `mail` varchar(100) default NULL,
 `url` varchar(100) default NULL,
 `content` text,
 `title` varchar(100) default NULL,
 `reply` text,
 PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;

2、连接数据库部分
把连接数据库部分单独列出来,conn.asp:
引用
<%@ CODEPAGE = "936" %>
<%set conn=server.createobject("adodb.connection")
'连接本机的Mysql数据库
conn.OPEN "DRIVER=com.mysql.jdbc.Driver;URL={jdbc:mysql://127.0.0.1:3306/guestbook};uid=linuxing;pwd=redflag"
'连接本机的MSSQL数据库(Windows平台)
'conn.Open "DRIVER={SQL Server};SERVER=localhost;DATABASE=guestbook;uid=linuxing;pwd=redflag"
'连接另一台Windows平台的MS SQL数据库
'conn.Open "DRIVER=com.microsoft.jdbc.sqlserver.SQLServerDriver;URL={jdbc:microsoft:sqlserver://192.168.228.223:1433};DatabaseName=guestbook;User=linuxing;Password=redflag"
%>

三、代码部分
ASP可以使用两种方式读写数据库:
引用
1、ADODB.connection.Execute方式
其可以直接使用标准的SQL语句,例如:select、update、delete、insert等。
2、ADODB.Recordset方式
使用select * from获取数据段,然后运行rs.Addnew、rs.Delete、rs.Update等方式更新。

对比两种方法,Recordset方式最简单,也最常用,代码编写容易。而connection.Execute方法能直接利用SQL语句的强大功能,速度快,迁移方便。
考虑到兼容性的问题(见附录)。我结合了两种方式编写,利用rs对象的select结果进行判断,而使用connection.Execute方法进行更新。
1、index.asp
引用
'这是原来连接Access数据库的部分,已经屏蔽
'set conn=server.createobject("adodb.connection")
'DBPath = Server.MapPath("gb.mdb")
'conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath

Set rs = Server.CreateObject("ADODB.Recordset")

'创建Recordset对象,并使用其读取数据库内容,后面使用rs对象引用属性,很方便
dim rs, sql
set rs = server.createobject("adodb.recordset")
dim curpage, strcate

if keyword <> "" then
keyword = replace(keyword,"'","")               '过滤关键字
keyword = replace(keyword,"[","")
keyword = trim(keyword)
wherestr=" where name like '%" & trim(keyword) & "%' or content like '%" & trim(keyword) & "%' or title like '%" & trim(keyword) & "%'"
end if

sql = "SELECT * FROM guestbook " & wherestr & " ORDER BY id DESC"
rs.open sql, conn, 1, 1

2、add.asp
引用
Set rs = Server.CreateObject("ADODB.Recordset")
'Mysql不支持top 1这样的写法,可以使用下面的排序方式解决
'sql="select top 1 * from guestbook"
sql="select * from guestbook order by id limit 1"
rs.Open sql,conn,3,3

使用Execute方法代替rs.AddNew、rs.Update方法:
引用
conn.Execute "insert into guestbook(addtime,name,ip,mail,title,url,content) values ('"&now&"','"&server.HTMLEncode(Request("name"))&"','"&Request.ServerVariables("Remote_Addr")&"','"&server.HTMLEncode(request("mail"))&"','"&server.HTMLEncode(request("title"))&"','"&server.HTMLEncode(url)&"','"&Request("content")&"')"

3、del.asp
使用rs.Delete方法删除数据,这里和使用conn.Execute方法差别不大。
引用
Set rs = Server.CreateObject("ADODB.Recordset")
sql="select  * from guestbook where id=" & request("id")
rs.Open sql,conn,3,2

if not rs.EOF then rs.Delete

4、reply.asp
使用Execute方法明显比较简单
引用
 if Request("reply")<> "" then
conn.Execute "Update guestbook set reply='" & request("reply") & "' where id=" & request ("id")
   %><br><%
   msg="回复成功。"

修改后的版本:

四、结果
点击在新窗口中浏览此图片
五、附录
这周,经过对iASP关于数据库部分连接的测试,发现有如下几个问题:
1、连接MS SQL数据库的时候,如果字段属性是text或ntext,则读写中文就会有乱码,但英文正常;
问题原因:iASP使用java中间环境对MS SQL数据库读写,而此时java环境写入MS SQL2000就会出现乱码。
暂时没有找到很好的解决方法,只能暂时把text或ntext改为nvarchar属性。
2、连接MySQL数据库的时候,Recordset的Addnew、Update方法对中文写入都会出现乱码的问题,英文正常,读方式也正常;
问题原因:同上。
解决方法:
修改mysql服务器的默认运行环境:
# vi /etc/my.cnf
引用
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server=gbk
collation-server=gbk_chinese_ci

并使用connection.Execute方法代替Recordset方式即可。
虽然编写麻烦一点,但效率比Recordset方式要高。
Tags: , , ,
风の雪
2012/01/14 23:21
为什么你的这个blog是能显示中文的?我把一个中文的html直接重命名为asp,中文就无法正常显示了。
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]