<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
 <META http-equiv="Content-Type" content="text/html; charset=gb2312">
 <META NAME="GENERATOR" CONTENT="lfparser_2.23">
 <META NAME="LFCATEGORY" CONTENT="Applications">
<!-- this is used by a number of tools:
 =LF=AUTHOR: Georges     Tarbouriech
 =LF=CAT___: Applications
 =LF=TITLE_: MySQL & Perl, 便利之合
 =LF=NUMBER: 226
 =LF=ANAME_: article226.shtml
 -->
 <TITLE>lf226, Applications: MySQL & Perl, 便利之合</TITLE>
<!-- stylesheet added by lfparser: --> 
<style type="text/css">
<!--
 td.top {font-family: Arial,Geneva,Verdana,Helvetica,sans-serif; font-size:12 }
 pre { font-familiy:monospace,Courier }
 p.cl { color:#EE9500 }
 a.nodec { text-decoration:none }
 p.trans { font-size:8pt; text-align:right }
 p.clbox { width:50%; alignment:center; background-color:#FFD700; border-style:none; border-width:medium; border-color:#FFD700; padding:0.5cm ;  text-align:center }
 p.code { width:80%; alignment:center; background-color:#aedbe8; border-style:none; border-width:medium; border-color:#aedbe8; padding:0.1cm ;  text-align:left }
 p.foot { background-color:#AAAAAA; color:#FFFFFF; border-style:none; border-width:medium; border-color:#AAAAAA; padding:0.5cm ; margin-top:0.1cm; margin-right:1cm; margin-left:1cm; text-align:center }
-->
</style>
 
</HEAD>
<BODY bgcolor="#ffffff" text="#000000">
 <!-- this is generated html code. NEVER use this file for your
 translation work. Instead get the file with the same article number
 and .meta.shtml in its name. Translate this meta file and then
 use lfparser program to generate the final article -->
 <!-- lfparser can be obtained from http://www.linuxfocus.org/~guido/dev/lfparser.html -->

<!-- 2pdaIgnoreStart -->

<!-- start navegation bar -->
 <!-- top navegation bar -->
 <TABLE summary="topbar_1" cellspacing="0" cellpadding="0" border="0" align="center" width="90%">
   <TR bgcolor="#2e2292">
     <TD class="top"><TABLE summary="topbar_1_logo" cellspacing="0" cellpadding="0" border="0" width=
       "100%">
         <TR><TD width="319"><IMG src="../../common/images/logolftop_319x45.gif"
           alt="[LinuxFocus-icon]" width="319" height="45" align="left" 
           border="0"></TD>

           <TD class="top">
             <TABLE summary="topbar_1_links" width="100%">
               <TR align="right">
                 <TD class="top"><A class="nodec" href="../index.shtml"><FONT color=
                 "#DDDDDD" size="2">首页</FONT></A> &nbsp;|&nbsp; <A class=
                 "nodec" href="../map.html"><FONT color=
                 "#DDDDDD" size="2">站点地图</FONT></A> &nbsp;|&nbsp; <A class=
                 "nodec" href="../indice.html"><FONT color=
                 "#DDDDDD" size="2">索引</FONT></A> &nbsp;|&nbsp; <A class="nodec" href="../Search/index.shtml"><FONT color=
                 "#DDDDDD" size="2">搜索</FONT></A> </TD>
               </TR>

               <TR align="right">
                 <TD class="top">
                   <HR width="100%" noshade size="1">
                 </TD>
               </TR>
             </TABLE>
           </TD>
         </TR>
       </TABLE>
     </TD>
   </TR>
 </TABLE>
 <!-- end top navegation bar -->
 <!-- blue bar -->
 <TABLE summary="topbar_2" cellspacing="0" cellpadding="0" border="0" align="center"
 width="90%">
   <TR bgcolor="#00ffff">
     <TD><IMG src="../../common/images/transpix.gif" width="1" height=
     "2" alt=""></TD>
   </TR>
 </TABLE>
 <!-- end blue bar -->
 <!-- bottom navegation bar -->
 <TABLE summary="topbar_3" cellspacing="0" cellpadding="0" border="0" align="center"
 width="94%">
   <TR bgcolor="#000000">
     <TD>
       <TABLE summary="topbar_3_links" cellspacing="0" cellpadding="1" border="0" width=
       "100%">
         <TR align="center">
           <TD WIDTH="20%"><A class="nodec" href="../News/index.shtml"><FONT color=
           "#FFFFFF">新闻</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../Archives/"><FONT color=
           "#FFFFFF">过往期刊</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../Links/index.shtml"><FONT color=
           "#FFFFFF">链接</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../aboutus.html"><FONT color=
           "#FFFFFF">关于LF</FONT></A> </TD>
         </TR>
       </TABLE>
     </TD>
   </TR>
 </TABLE>
 <!-- end bottom navegation bar -->
<!-- stop navegation bar -->

<!-- SSI_INFO -->

<!-- tr_staticssi include virtual -->
<!-- tr_staticssi exec cmd -->
<!-- addedByLfdynahead ver 1.4 --><TABLE ALIGN="right" border=0><TR><TD ALIGN="right"><FONT SIZE="-1" FACE="Arial,Helvetica">This document is available in: <A href="../../English/January2002/article226.shtml">English</a> &nbsp;<A href="../../Castellano/January2002/article226.shtml">Castellano</a> &nbsp;<A href="../../ChineseGB/January2002/article226.shtml">ChineseGB</a> &nbsp;<A href="../../Deutsch/January2002/article226.shtml">Deutsch</a> &nbsp;<A href="../../Francais/January2002/article226.shtml">Francais</a> &nbsp;<A href="../../Nederlands/January2002/article226.shtml">Nederlands</a> &nbsp;<A href="../../Portugues/January2002/article226.shtml">Portugues</a> &nbsp;<A href="../../Russian/January2002/article226.shtml">Russian</a> &nbsp;<A href="../../Turkce/January2002/article226.shtml">Turkce</a> &nbsp;<A href="../../Arabic/January2002/article226.shtml">Arabic</a> &nbsp;</FONT></TD></TR></TABLE><br>
 


<!-- SSI_INFO STOP -->
<!-- 2pdaIgnoreStop -->

<!-- SHORT BIO ABOUT THE AUTHOR -->
<TABLE ALIGN=LEFT BORDER=0  WIDTH="30%" >
<TR>
<TD>

<IMG src="../../common/images/Georges-Tarbouriech.jpg" width=
    "115" height="124" alt="Georges Tarbouriech">
<BR>by  Georges Tarbouriech <br> <small>&lt;georges.t(at)linuxfocus.org&gt;</small>
<BR><BR>
<I>关于作者:</I><BR>
<P>Georges先生使用Unix多年,他喜欢用自由软件方案来解决专业领域内的问题。</P>
<!-- TRANSLATED TO gb -->
<!-- TRANSLATED TO STOP -->
<BR><i>目录</i>:
<UL>
  <LI><A HREF="#226lfindex0">What about this nice pair ?</A></LI>
  <LI><A HREF="#226lfindex1">使用的范例</A></LI>
  <LI><A HREF="#226lfindex2">建立数据库</A></LI>
  <LI><A HREF="#226lfindex3">Perl的工作</A></LI>
  <LI><A HREF="#226lfindex4">安全方面</A></LI>
  <LI><A HREF="#226lfindex5">其它</A></LI>
  <LI><A HREF="#226lfindex6">参考</A></LI>
  <LI><A HREF="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=226&amp;lang=en">对这篇文章发表评论</A></LI>
</UL>

</TD></TR></TABLE>
<!-- HEAD OF THE ARTICLE -->
<br>&nbsp;
<H2>MySQL & Perl, 便利之合</H2>
 <IMG src="../../common/images/article226/mysqlandperl.png"  width="167" height="87" alt="MySQL and Perl" hspace="10">
<!-- ABSTRACT OF THE ARTICLE -->
<P><i>摘要</i>:
<P>
<P>MySQL和Perl诞生已有相当长时间,尽管"时尚"不停变化着,他们仍然被广泛使用。本文讨论如何将两种工具结合在一起应用于Ineternet及局域网上。文中的例子编写于Unix系统,当然它同样可以应用于其它广泛使用的系统中。
<br>
    本文对这对组合的应用作有限讨论,讨论其易用性,速度,可靠性,安全性等。<br>
    本文并不是一篇MYSQL或Perl的教程;也不是一篇对MYSQL或Perl的评论。<br>
    我们将看到如何结合使用MySQL与Perl,不要忘记:"there is more than one way to do it"。

</P></P>
<HR size="2" noshade align="right"><BR>
<!-- BODY OF THE ARTICLE -->


    <A NAME="226lfindex0">&nbsp;</A>
<H2>What about this nice pair ?</H2>

    <P><B>MySQL</B>是一种关系型数据库系统(RDBMS),其主页为<A href="http://www.mysql.com/">http://www.mysql.com/</A>。
它由GNU GPL发布并供免费使用,请注意阅读版权声明。 它可以在许多平台上工作,既作服务器同时又是客户端。除MySQL之外还有一些
其它的自由软件性质的RDBMS,在这里不作任何比较,本文仅讨论MYSQL。我们也不将其与那些大型商业数据库像
Informix,Oracle,Sybase等作比,有足够理由相信MySQL是Internet上使用最广泛的数据库系统之一。
在这篇文章里我们使用的MySQL版本是3.23.36。现在的稳定发行版本是3.23.46,而苦苦等待的4.0版
仍在测试之中。人们可以从网上下载到它们的源代码或包文件。<BR>
为了将MySQL与Perl结合使用,你还需要些东西: Perl DBI模块。至少你应该下载DBI,
Msql-Mysql-modules, Data-Dumper和Data-ShowTable等。<BR>
本文不介绍它们的安装过程,因为那很简单,同时包中的说明文件已经提供了你需要知道的所有内容。
 <BR><B>Perl</B>全称是实用摘录与报告语言(Practical Extraction and Report Language)。
 最初它用于文件处理(分析,摘要...),很快它的功能就有了扩展。 你几乎可以用它来做任何
任何事情:系统管理,CGI脚本程序以及数据库接口程序。<BR>Perl包含于许多(如果不能称是全部的话)Unix发行版本中,
它们中有些是免费的,有些不是。本文写作时,稳定的版本是5.6.1,版本5.7.2在测试中。
本文采用的是5.005_03,很不错的一个版本,尽管老点。如果你的机子还没有装Perl,你可以从<A
href="http://www.perl.com/">http://www.perl.com/</A>下载。Perl提供了许多模块,用它们几乎可以完成任何事,你可以从这个网站的CPAN栏目找到它们。<BR>
最后一点,为了让这两种软件真正开始工作,你还需要一个web服务器。Apache应该是一个不错的选择,它集成于多种Unix系统中。
如果你还没有,可以到<A href="http://www.apache.org/">http://www.apache.org/</A>下载。</P>

 <A NAME="226lfindex1">&nbsp;</A>
<H2>使用的范例</H2>

<P>你也许已经注意到LinuxFocus杂志有多种语言的版本。这就意味着作为编辑需要同时管理
新文章以及它的译文版本。一般情况下,我们可以看到大约200篇文章,平均每篇文章有5个语言的版本,这样产生了大约1000篇文章并且还在继续增长!
这些文章需要被存档,格式标准化,总结及摘要.....应该怎么做这些事?当然,用Perl!
<BR>我们的总编Guido Socher编写的许多perl程序使我们的工作变的简单了许多,他写过一本三部头的
Perl教程和一本评论Perl的书。参照本文末尾的参考文献部分。
<BR>Javi,我们的西班牙编辑,用Perl编写了一个程序来管理翻译进度。<BR>Atif是我们的明星作者,
他来自perl王国,所以他的母语就是Perl。 他同时也撰写关于MySQL方面文章,致力于一个WEB管理工具改进工作。
同样你可以在参考文献部分找到他。
<BR>总之,如果你在寻找一个Perl世界,加入LinuxFocus。
<BR>我是LinuxFocus法文版的编辑之一,我更懒,于是创建了自己的LinuxFocus数据库,猜猜用什么:
MySQL 和Perl!</P>

 <A NAME="226lfindex2">&nbsp;</A>
<H2>建立数据库</H2>

<P>首先你应当已经正确安装了MySQL,并配置好用户密码。关于安装并不是本文讨论的内容,MySQL自带的
大量文档已经描述了所有细节。 <BR>用<I>mysql.server</I>启动MySQL服务器,这个命令同时调用
<I>safe_mysqld</I> 守护进程,因此你可以给它传参。<BR>用</P>
<P class=code>mysql -h host -u user -p</P>连接到服务器,如果服务器就装在你本机上,就不用加参数<I>-h host</I>。
<BR>输入密码无误后,你将连接到服务器。现在可以建立自己的数据库了。
<BR>在mysql命令提示符状态下输入
<P class=code>CREATE DATABASE lf;</P>,这个是我们的示范数据库(lf代表LinuxFocus),
你可以根据你的需要命名成别的。接下来就是给用户授权了,当然首先你要有足够的权限(你需要
用有administrator权限的用户连接)。如果需要让某个用户管理数据库,通过
<P class=code>GRANT ALL ON lf.* TO username; </P>给他授权。输入
<P class=code>USE lf </P>选择刚才创建的数据库,并创建一张表。
在这里我们创建的表是trissue,命令格式为:
<P class=code>CREATE TABLE trissue (num INTEGER UNSIGNED, category VARCHAR(25),
title VARCHAR(40), author VARCHAR(20), en VARCHAR(20), es VARCHAR(20), fr
VARCHAR(20),de VARCHAR(20), nl VARCHAR(20), ru VARCHAR(20), tk VARCHAR(20),
issue VARCHAR(20)); </P>通过下面的命令可以检查一下我们刚才创建的表内容是否正确
<P class=code>USE lf<BR>SHOW TABLES; <BR>DESCRIBE trissue; </P>
<BR>下面我们需要在表中填入数据,往一张空表中导入数据的最简单的方法就是使用一个
带TAB分隔符的文本文件。如果文本文件已经准备好,输入
<P class=code>LOAD DATA LOCAL INFILE "maindb.txt" INTO TABLE trissue; </P>如果你的文本文件没有
问题,那么现在这张表就已经填好数据,你可以通过输入以下命令检验一下:
<P class=code>SELECT * FROM trissue; </P>这将导致显示一个很长的列表。
现在,你就可以进行查询来获得任何类型的数据了。<BR>ok,到现在为止,
我们仅仅用了MySQL,就可以做任何事情,那么,用Perl来做什么?
<P></P>
    <A NAME="226lfindex3">&nbsp;</A>
<H2>Perl的工作</H2>

<P>Perl可以帮助我们自动进行查询,将结果显示到一个WEB浏览器上,等等。重复一遍,
首先需要为Perl安装正确的模块使之能与MYSQL联合工作。
<BR>现在我们用Perl来写一个CGI脚本。它的作用是将Perl与HTML技术结合以实现查询数据库
并将结果格式化输出。<BR>我们用一个简单的脚本来查询某一作者的所有文章,显示文章的编号,分类,
标题,不同语言版本的翻译者的姓名,发表文章的杂志期号。 <BR>你可以将这个脚本当作一个模块使用,但是注意这个例程并不是一个
非常可靠的程序。你可以从下面的链接下载到一个有详细注释的版本。<A
href="http://main.linuxfocus.org/common/src/article226/lfperl.txt">=&gt;here&lt;=</A>.
<BR><BR></P>
<P class=code>#!/usr/bin/perl -Tw <BR># First, we say this is a "Tainted" Perl
script. <BR># <BR># This is a comment <BR># db consult <BR># <BR># We use the
Perl DBI module <BR>use DBI; <BR><BR># As cgi : <BR>use CGI qw(param());
<BR><BR>print &lt;&lt;END_of_start; <BR><BR>Content-type: text/html
<BR><BR>&lt;html&gt; <BR>&lt;title&gt;LFAuthors main db&lt;/title&gt;
<BR><BR>&lt;center&gt;&lt;TABLE&gt; <BR>&lt;TR VALIGN=TOP&gt;
<BR>&lt;TD&gt;&lt;form action="/cgi-bin/lf.cgi" method="get"&gt; <BR><BR># Here
comes the button's title for the launching page <BR>&lt;input type="submit"
value=" LFAuth "&gt; <BR>&lt;/form&gt; <BR>&lt;/TD&gt; <BR>&lt;/TR&gt;
<BR>&lt;/TABLE&gt; </P>下面用脚本去查询数据库。
<P class=code>&lt;center&gt;&lt;H2&gt;Search by author&lt;/H2&gt;&lt;/center&gt;
<BR><BR>&lt;form action=\"/cgi-bin/lf.cgi\" method=\"get\"&gt;Author name :
&lt;input <BR>type=\"text\" size=\"30\" name=\"author\"&gt;&lt;input
type=\"submit\" <BR>value=\"Search...\"&gt;&lt;/form&gt;&lt;/center&gt;
<BR><BR><BR>END_of_start <BR><BR><BR>if (param("author") ne '') { <BR>$author =
param("author"); <BR><BR>$autsrch.='"'; <BR>$autsrch.=$author;
<BR>$autsrch.='"'; <BR><BR># We connect to the database named lf as user doe
<BR><BR>$dbh = DBI-&gt;connect("DBI:mysql:lf","doe",''); <BR><BR>$sth =
$dbh-&gt;prepare(" <BR>select * <BR>from trissue <BR>where <BR>author = $autsrch
<BR>"); <BR><BR>$sth-&gt;execute; </P>接着用脚本去显示查询结果。
如果我们不限制查询条件,将会显示出数据库的所有内容,如果我们提供一个作者姓名,则会显示出
与该作者相关的所有文章。当你的数据库有上千条记录时,不推荐显示出所有内容!
<P class=code>print &lt;&lt;END_suite; <BR><BR>&lt;center&gt; <BR>&lt;TABLE
BORDER=&gt; <BR>&lt;tr bgcolor=#A1C4EE&gt; <BR>&lt;th width=60
align=CENTER&gt;&lt;font color=#000000&gt; Num &lt;/font&gt;&lt;/th&gt;
<BR>&lt;th width=110 align=CENTER&gt;&lt;font color=#000000&gt; Category
&lt;/font&gt;&lt;/th&gt; <BR>&lt;th width=110 align=CENTER&gt;&lt;font
color=#000000&gt; Title &lt;/font&gt;&lt;/th&gt; <BR>&lt;th width=110
align=CENTER&gt;&lt;font color=#000000&gt; Author &lt;/font&gt;&lt;/th&gt;
<BR>&lt;th width=110 align=CENTER&gt;&lt;font color=#000000&gt; En
&lt;/font&gt;&lt;/th&gt; <BR>&lt;th width=110 align=CENTER&gt;&lt;font
color=#000000&gt; Es &lt;/font&gt;&lt;/th&gt; <BR>&lt;th width=110
align=CENTER&gt;&lt;font color=#000000&gt; Fr &lt;/font&gt;&lt;/th&gt;
<BR>&lt;th width=110 align=CENTER&gt;&lt;font color=#000000&gt; De
&lt;/font&gt;&lt;/th&gt; <BR>&lt;th width=110 align=CENTER&gt;&lt;font
color=#000000&gt; Nl &lt;/font&gt;&lt;/th&gt; <BR>&lt;th width=110
align=CENTER&gt;&lt;font color=#000000&gt; Ru &lt;/font&gt;&lt;/th&gt;
<BR>&lt;th width=110 align=CENTER&gt;&lt;font color=#000000&gt; Tk
&lt;/font&gt;&lt;/th&gt; <BR>&lt;th width=110 align=CENTER&gt;&lt;font
color=#000000&gt; Issue &lt;/font&gt;&lt;/th&gt; <BR>&lt;/tr&gt;
<BR><BR>END_suite <BR><BR>while(
($num,$category,$title,$author,$en,$es,$fr,$de,$nl,$ru,$tk,$issue)
=$sth-&gt;fetchrow() ) { <BR>print "&lt;tr&gt;"; <BR>print "&lt;td width=60
bgcolor=#FFFFE8 align=center&gt; $num&lt;/td&gt;"; <BR>print "&lt;td width=110
bgcolor=#FFFFE8 align=left&gt; $category&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $title&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $author&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $en&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $es&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $fr&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $de&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $nl&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $ru&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $tk&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $issue&lt;/td&gt;"; <BR>print
"&lt;/tr&gt;"; <BR><BR>} <BR>print "&lt;/TABLE&gt;"; <BR>print "&lt;BR&gt;";
<BR>print "&lt;BR&gt;"; <BR>print "&lt;br&gt;"; <BR><BR><BR>} else { <BR><BR>#
DB Connect <BR><BR>$dbh = DBI-&gt;connect("DBI:mysql:lf","doe",'');
<BR><BR><BR># Search <BR><BR>$sth = $dbh-&gt;prepare(" <BR>select * <BR>from
trissue <BR>"); <BR><BR>$sth-&gt;execute; <BR><BR><BR># Display result
<BR><BR><BR>print &lt;&lt;SUITE; <BR><BR>&lt;center&gt; <BR>&lt;TABLE
BORDER=&gt; <BR>&lt;tr bgcolor=#A1C4EE&gt; <BR>&lt;th width=60
align=CENTER&gt;&lt;font color=#000000&gt; Num &lt;/font&gt;&lt;/th&gt;
<BR>&lt;th width=110 align=CENTER&gt;&lt;font color=#000000&gt; Category
&lt;/font&gt;&lt;/th&gt; <BR>&lt;th width=110 align=CENTER&gt;&lt;font
color=#000000&gt; Title &lt;/font&gt;&lt;/th&gt; <BR>&lt;th width=110
align=CENTER&gt;&lt;font color=#000000&gt; Author &lt;/font&gt;&lt;/th&gt;
<BR>&lt;th width=110 align=CENTER&gt;&lt;font color=#000000&gt; En
&lt;/font&gt;&lt;/th&gt; <BR>&lt;th width=110 align=CENTER&gt;&lt;font
color=#000000&gt; Es &lt;/font&gt;&lt;/th&gt; <BR>&lt;th width=110
align=CENTER&gt;&lt;font color=#000000&gt; Fr &lt;/font&gt;&lt;/th&gt;
<BR>&lt;th width=110 align=CENTER&gt;&lt;font color=#000000&gt; De
&lt;/font&gt;&lt;/th&gt; <BR>&lt;th width=110 align=CENTER&gt;&lt;font
color=#000000&gt; Nl &lt;/font&gt;&lt;/th&gt; <BR>&lt;th width=110
align=CENTER&gt;&lt;font color=#000000&gt; Ru &lt;/font&gt;&lt;/th&gt;
<BR>&lt;th width=110 align=CENTER&gt;&lt;font color=#000000&gt; Tk
&lt;/font&gt;&lt;/th&gt; <BR>&lt;th width=110 align=CENTER&gt;&lt;font
color=#000000&gt; Issue &lt;/font&gt;&lt;/th&gt; <BR>&lt;/tr&gt; <BR><BR>SUITE
<BR><BR>while(
($num,$category,$title,$author,$en,$es,$fr,$de,$nl,$ru,$tk,$issue)
=$sth-&gt;fetchrow() ) { <BR>print "&lt;tr&gt;"; <BR>print "&lt;td width=60
bgcolor=#FFFFE8 align=center&gt; $num&lt;/td&gt;"; <BR>print "&lt;td width=110
bgcolor=#FFFFE8 align=left&gt; $category&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $title&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $author&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $en&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $es&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $fr&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $de&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $nl&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $ru&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $tk&lt;/td&gt;"; <BR>print "&lt;td
width=110 bgcolor=#FFFFE8 align=left&gt; $issue&lt;/td&gt;"; <BR>print
"&lt;/tr&gt;"; <BR><BR>} <BR>print "&lt;/TABLE&gt;"; <BR>print "&lt;BR&gt;";
<BR><BR>} <BR>print end_html; <BR>$sth-&gt;finish; <BR><BR><BR># Disconnect
<BR><BR>$dbh-&gt;disconnect; <BR><BR>exit; </P>这里是浏览器窗口显示的查询结果:<BR><BR>
<P>
<CENTER><A href="../../common/images/article226/query.jpg"><IMG
alt=query src="../../common/images/article226/queryth.jpg"></A></CENTER><BR><BR>
<P></P>
<A NAME="226lfindex4">&nbsp;</A>
<H2>安全方面</H2>

<P>如果你想为你的网站加上数据库支持,你显然要考虑安全性的问题。这里我们并不提供
一个方案去按部就班的解决WEB服务器或数据库服务器安全问题,然而有一些基本的原则还是需要
注意的。
<BR>简单点说,当你想在WEB服务器上提供其它功能时,首先需要考虑的是WEB服务器的安全性。
这与本文的主题无关,有很多文档讨论了这方面内容。一个比较好的去处是
<A href="http://www.linuxdoc.org/">the Linux
Documentation Project</A>.
<BR>接下来的一步跟你的数据库服务器有关。在安装一些工具软件比如MySQL,不要忘了阅读软件手册中
关于安全性的部分。再重复一下关于用户密码的基本原则:不要让任何帐号没有密码,特别是数据库
的root帐号(这个跟计算机的root帐号是不同的)。另一个要点是权限的设置:绝不要将所有帐号都赋予
完全控制的权限。这样做显的很普遍,因此人们通常会忘了这一点。
<BR>此外,还可以试试chroot数据库。你可以看看这一期里<A
href="http://main.linuxfocus.org/English/January2002/article225.shtml">Mark的文章</A>
他讲的是另外一个数据库但这些内容可应用到MySQL中。<BR>另一个安全措施涉及到数据的传送过程。
在一个管道(tunnel)里接收和发送数据是个不坏的主意。参考<A
href="http://main.linuxfocus.org/English/May2001/article202.shtml">Through the
tunnel</A>。 <BR>最后但仍是重要的一点,编写安全的程序。
Perl是一种伟大的语言,但在编写程序的过程中经常容易出错。另外一篇LinuxFocus文章将教你如何做,
特别是用Perl的时候。
<A
href="http://main.linuxfocus.org/English/November2001/article203.shtml">看看这篇文章</A>.
这是"编写安全的程序"系列的最后一篇文章,专门谈到了有关CGI脚本的问题。(必读!)<BR>

当然,我们首先假定了在这一些措施之前你已经拥有一个很坚固的系统,没有那些著名的漏洞,已经安装了最新的
补丁,以及其它一些必备的安全工具,比如NIDS(Network Intrusion Detection System)的snort(from <A
href="http://www.snort.org/">http://www.snort.org/</A>), 防火墙,端口与安全扫描工具(<A href="http://www.insecure.org/">nmap</A>, <A
href="http://www.nessus.org/">nessus</A>)等等。 <BR>如果你经济上能够承受,你可以
在别的一台计算机上安装服务器:这样,就有了一个单独的WEB服务器,一个单独的数据库服务器...以及镜像服务器,
以此来获得高可靠性。
警告:为保证安全所做的
工作永远不会结束,永远不可能有真正的安全。你只是试图去减少危险,每天它们都变得更加危险。</P>
<A NAME="226lfindex5">&nbsp;</A>
<H2>其它</H2>

<P>因为"There Is More Than One Way to Do It",你可以选择你的方式。
现在有许多种RDBMS,以及许多种与之相关的语言。写这篇文章是为了展示MySQL与Perl是如何出色的合作。
<BR>当然,这种选择带有明显的主观性:我喜欢MySQL,因为它小,可以在许多系统上运行,
速度快,可靠...我也非常欣赏MySQL组的工作,不会忘记众多的投稿者。我最为欣赏的是:他们
并不是在做重复性的工作(在此之前已经有商业软件的解决方案),而是让事情变的更加简单。<BR>关于Perl,要说的都说了。还要补充一些:
我相信没有它你是无法工作的,不管你是一个网管还是一个程序员还是做别的工作。
Perl公社(the perl community)是世界上最大的资源交流地之一。有一本叫做Perl Journal的杂志,现在是SysAdmin杂志的一部分,每期两篇文章,你可以到<A
href="http://www.samag.com/">http://www.samag.com/</A>订阅。<BR>
一些题外话: LinuxFocus的读者们也许没有注意到与本杂志相关的一些人,然而我们却可以看到LinuxFocus杂志各种语言的版本。
有没有注意到一些小组 ,他们也许只有一两个人,却完成了大量的工作。他们是网站维护者,
译者,等等。看看俄文组,土耳其语组,你会发现多数文章都是由Kirill或Erdal翻译。
看看葡萄牙语组或阿拉伯语级,同样如此!这些人干了多么了不起的工作,我要向他们表示祝贺!感谢各位!
自由软件世界应当向你们致谢。
<BR>抱歉这些跟本文的主题无关,但我相信这些是值得一提的。
<BR>回到文章当中来,让我以一段关于自由软件的文字来结束本文。应当感谢那些工作于MySQL和
 Perl的人,他们向我们提供了许多伟大的工具,并且多数是免费的。这些工具与真正的商业
 产品相比也毫不逊色(如果不能比它们出色的话)。它们经常更新,附有详细的文档,你可以
 把它们用于几乎所有Unix系统中。你能找到同样出色的别的软件吗?我想不能!
 <BR>这篇文章可能没有教你多少东西,但是如果它使你觉得有必要试试这些软件,它就是有用的。
 <BR>我们不是生活在一个伟大的时代?</P>
<A NAME="226lfindex6">&nbsp;</A>
<H2>参考</H2>

<p>
<A href="http://www.perl.org">Perl.org</a> <br>
<A href="http://www.cpan.org">cpan.org</a>, Perl文档中心
<br><br>
Guido的Perl教程:
<br><br>
<A href="../September1999/article114.html">Perl I</a>
<br>
<A href="../November1999/article126.html">Perl II</a>
<br>
<A href="../../English/January2000/article136.shtml">Perl III</a>
<br><br>
专业Perl编程书评
<br><br>
<A href="../../English/July2001/article208.shtml">Perl Programming</a>
<br><br>
<A href=
    "http://www.mysql.com/downloads/download.php?file=Downloads/Contrib/mysqladmin-atif-1.0.tar.gz">Atif的MySQL管理工具</A>
    <br><br>
LinuxFocus杂志的MySQL评论: 老文章,但还可一读
<br><br>
<A href="../../English/July1998/article59.html">MySQL</a>
<br><br>
LinuxFocus上的一篇较老的SQL教程
<br><br>
<A href="../../English/May1998/article38.html">SQL Part I</a>
<br>
<A href="../../English/July1998/article58.html">SQL Part II</a>
<!-- vim: set sw=2 ts=2 et: -->
  



<!-- 2pdaIgnoreStart -->
<A NAME="talkback">&nbsp;</a>
<h2>对这篇文章发表评论</h2>
每篇文章都有各自的反馈页面。在这个页面里,您可以提交评论,也可以查看其他读者的评论:
<center>
<table border="0"  CELLSPACING="2" CELLPADDING="1">
 <tr BGCOLOR="#C2C2C2"><td align=center>
  <table border="3"  CELLSPACING="2" CELLPADDING="1">
   <tr BGCOLOR="#C2C2C2"><td align=center>
    <A href="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=226&amp;lang=en"><b>&nbsp;反馈页面&nbsp;</b></a>
   </td></tr></table>
</td></tr></table>
</center>

<HR size="2" noshade>
<!-- ARTICLE FOOT -->
<CENTER><TABLE WIDTH="98%">
<TR><TD ALIGN=CENTER BGCOLOR="#9999AA" WIDTH="50%">
<A HREF="../../common/lfteam.html">主页由LinuxFocus编辑组维护</A>
<BR><FONT COLOR="#FFFFFF">&copy; Georges     Tarbouriech, <a href="../../common/copy.html">FDL</a> <BR><a href="http://www.linuxfocus.org">LinuxFocus.org</a></FONT>
<BR><a href="http://cgi.linuxfocus.org/cgi-bin/lfcomment?lang=gb&amp;article=article226.shtml" target="_TOP">点击这里向LinuxFocus报告错误或提出意见</A><BR></TD>
<TD BGCOLOR="#9999AA">
<!-- TRANSLATION INFO -->
<font size=2>翻译信息:</font>
<TABLE>
  <tr><td><font size="2">en --&gt; -- : Georges Tarbouriech <small>&lt;georges.t(at)linuxfocus.org&gt;</small></font></td></tr>
  <tr><td><font size="2">en --&gt; zh: yey &lt;yeyxx(at)263.net&gt;</font></td></tr>
</TABLE>
</TD>
</TR></TABLE></CENTER>
<p><font size=1>2002-01-14, generated by lfparser version 2.23</font></p>
<!-- 2pdaIgnoreStop -->
</BODY>
</HTML>