{S0}
{S1}简介
有很多Perl的留言簿,在那里,其中许多在一个平面文件存储数据。大部分的留言脚本使用MySQL作为后端的PHP写成的。此留言是所有Perl用户在那里谁想要一个留言存储在数据库,而不是在一个平面文件数据。
我也写了这个脚本一点点了解DBI是Perl的数据库独立接口。虽然DBI的多个数据库引擎提供了一个抽象的接口,我用MySQL特定的SQL语法。因此,此代码是跨不同的数据库不完全便携式。
此外,虽然我会提及一些DBI的细节,一个成熟的DBI的教程是超出了本文的范围。欲了解更多信息,请访问]。特点页面导航链接时存在一个以上的条目页面(默认为每页10项)数据存储在一个MySQL数据库显示的日期后,客人的姓名,位置,电子邮件地址,URL和消息。还跟踪客人IP地址。MySQL客户端配置文件
为了连接到MySQL服务器从一个Perl脚本,你必须提供一个有效的MySQL用户名,密码和主机名(除其他事项外)。为了安全起见,我选择了Web服务器的文档根目录以外的文件的文件存储在这些数据项。我打电话给该文件夹包括。例如,如果您的文档根目录在/ home / joeuser / WWW /位于,你会存储在/ home / joeuser中的文件/包括/。无论你决定把它,你必须指定它的路径,在实际的脚本。
这个文件的名字是perlgb.cnf,它必须具有以下格式:[客户端]主机=本地用户= your_username密码= your_password
主机通常是本地主机,除非你是连接到一个单独的数据库服务器。用户是你的MySQL用户名和密码是你的MySQL密码。您必须编辑这些值,以满足您的配置。
perl_gb MySQL表
perl_gb包含留言簿条目相关的所有数据。该表包含以下字段:MESSAGE_ID一个独特的,自动递增,非空整数。post_date一个条目发布的日期和时间。FIRST_NAME客人的名字。LAST_NAME客人的姓氏。市来宾城市生活英寸国家国家客人的生活英寸国家国家客人的生活英寸EMAIL_ADDR客人的电子邮件地址。网址客人的网址(可选)。IP_ADDRESS远程用户的IP地址。评论客人离开的评论。
URL以外的所有领域都需要注意。该脚本
下面的章节解释我如何使用DBI的检索和存储在MySQL中的数据。建立连接到MySQL
连接到MySQL,我们使用DBI - GT连接()方法。连接参数
DBI的需要四个连接参数,连接到MySQL的用户名,密码,主机和数据库的名称。前三将抓住从MySQL客户端配置文件,perlgb.cnf。您必须指定在脚本的数据库的名称,如下所示:我($ HOST_NAME,$ USER_NAME,$密码)=(民主,民主基金,UNDEF);我($ DB_NAME)="your_db_name";构建数据源
指定连接参数后,下一步就是构建数据源,在下面的代码DSN美元的变量代表。您使用的数据库引擎的类型决定了数据源的格式。注:DBI的资本并不重要,但MySQL必须在所有低case.my($ DSN)="的DBI:mysql:$ DB_NAME";$ DSN .=":HOSTNAME = $ HOST_NAME"如果美元HOST_NAME;$ DSN .="; mysql_read_default_file = /路径/要/ perlgb.cnf";
如果你不指定主机名,MySQL的默认设置为localhost。请注意,在最后一行,你必须指定路径到你的perlgb.cnf文件。连接到服务器
RAISEERROR = GT; 1告诉DBI的检查数据库相关的错误,打印消息并退出时,它检测one.my(%的attr)=(RAISEERROR => 1);我(美元胸径)= DBI ->连接(DSN美元,$ USER_NAME,$密码,\%attr的);
如果调用connect()的成功,一个连接句柄返回。以下公约,我有一个名为$胸径。我们可以使用该句柄在我们指定的数据库中对表运行查询。运行对MySQL查询使用DBI数据检索
从MySQL检索数据,你必须创建一个语句句柄。以下公约,我有一个名为美元STH这个代码。 $ DBH - GT传递一个SQL SELECT查询;准备()返回一个语句句柄,为我所用。我们必须调用$ STH - GT的execute(),以实际运行查询。在下面的例子中,我们计算perl_gb table.my(STH美元,美元计数)的留言簿条目的总数;#发出查询。STH美元= $ DBH ->准备(QQ {
60; 从perl_gb SELECT COUNT(MESSAGE_ID)});STH ->的execute();
#读查询结果,然后进行清理。计数= STH -> fetchrow_array();STH ->完成();$计数="(无法获得计数)"如果定义(美元计);
调用$ STH - GT; fetchrow_array()返回查询所返回的第一行。在这种情况下,查询只返回一行一个字段,这样我们就可以存储在一个标值,而不是一个数组。如果查询返回多个领域的一排,我们将不得不存储在一个数组变量的行。
若要检索多个行,你必须调用$ STH - GT;在一个循环fetchrow_array()。有没有更多的行返回时,fetchrow_array()将返回undef。
$ STH - GT;完成()释放我们刚跑出与查询相关的任何资源。插入数据
插入数据使用DBI是直截了当的。对于这一点,我们使用do()方法。 ()准备语句并执行查询,一步到位。这让我们跳过使用语句处理程序的步骤。 ()返回由我们传递给it.my(美元myQuery)的查询受影响的行数;$ myQuery ="INSERT INTO perl_gb(FIRST_NAME,LAST_NAME"。 "城市,州,国家,EMAIL_ADDR,URL,IP地址和意见)";美元myQuery .="VALUES($ FIRST_NAME,LAST_NAME,"。 "$城市,为国家,为国家,为EMAIL_ADDR,$ URL"。 "IP_ADDRESS美元,美元评论)";我(行)= $ DBH ->(QQ {$ myQuery});脚本的其余部分
脚本的其余部分是简单的Perl。没有什么棘手的代码,所以我不会进一步讨论。限制专为MySQL - MySQL特有的SQL扩展都使用,所以这不会对其他数据库不加修改地运行。专为Unix / Linux的 - 不过,稍加修改,将Windows机器上运行。没有管理小组 - 我的内容手动修改样式。但是,如果有足够的需求,我将建立一个管理面板。参考文献书籍克里斯蒂安森,汤姆和弥敦道Torkington。 Perl的食谱。塞瓦斯托波尔,CA:奥赖利放大器;联营公司,1998年。杜波依斯,保罗。 MySQL的。印第安纳波利斯:新车手出版社,2000。施瓦茨,兰德尔L.,等。学习Perl的Win32系统。塞瓦斯托波尔,CA:奥赖利放大器;联营公司,1997年。墙,拉里,等。编程的Perl。塞瓦斯托波尔,CA:奥赖利放大器;联营公司,1996年。网站]]]致谢
很久很久以前,我抓起home.gif和email.gif一个网站关闭,但我不记得我的生活。如果你知道在哪里,他们的起源,我会很乐意给信用信贷是由于。1.00 - 2002年9月25日:首次公开发行。1.01 - 2002年11月16日:在URL的HTML现在是逃过一劫。指出这一点]。1.01 - 2004年3月25日:删除的现场演示,从这个网页链接,因为我改变了一个Windows Web服务器。没有进行任何代码更改,因此版本号不递增。