返回首页


{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服务器。没有进行任何代码更改,因此版本号不递增。

回答

评论会员:游客 时间:2011/11/29
爵士我在perl脚本beginer。现在IAM在连接到数据库(MySQL)的Perl脚本。我有一个脚本,使用MySQL的查询创建一个表并插入值。程序代码:--------------------------------------------------------------------------------------{BR}#!/USR/BIN/perl的 使用严格;使用警告;使用DBI;#包散列;  #替换那些适合以下值#自己的环境#我的驱动程序="MySQL"的;我的数据库="脱维";$USER="根", 我的密码="脱维"; 我的$DBH=DBI-连接("DBI:驱动程序:$数据库",用户,密码,)或死亡$DBI::errstr;  (元myQuery);美元myQuery="INSERTINTOWSS1(EMPID,empname""Task_Assigned,Starting_Date,Dead_line,Project_Status)";打印"中间\N";#$myQuery.="VALUES(EMPID,元empname,美元Task_Assigned美元Starting_Date,Dead_line美元,美元Project_Status)";打印"在最后的\N";$myQuery=$DBH-(QQ{$EMPID美元empname美元Task_Assigned$Starting_Date美元Dead_line美元Project_Status});打印"AT最后的\N";我(STH美元,美元计数); #发行的查询STH=$DBH-准备(QQ{SELECTCOUNT(EMPID)从WSS1});STH-执行()#读取的查询结果,然后清理计数=STH-fetchrow_array()$STH-完成()$计数="(无法获得计数)"如果定义(美元计);!打印"共值$计数"; $DBH-断开(); -----------------------------------------------------------------------------------------{BR}我得到的是错误消息:全局符号"$EMPID"在countex.pl第29行需要明确的包的名称。全局符号"$empname"需要明确的包的名称,在countex.pl第29行。全局符号"$Task_Assigned"需要明确的包的名称,在countex.pl第29行。全局符号"$Starting_Date"在countex.pl第29行需要明确的包的名称。全局符号"$Dead_line"在countex.pl第29行需要明确的包的名称。全局符号"$Project_Status"在countex.pl第29行需要明确的包的名称。countex.pl中止执行,由于编译错误。主席先生,请帮我运行这个脚本。至于,kavitha
。jc_cpu
评论会员:游客 时间:2011/11/29
。下面一行部队良好的编程习惯使用严格;最有可能的错误消息意味着你还没有宣布你的变量。尝试添加线,这样你的程序的顶部。我EMPID;目前,我没有看到这些变量是如何让他们的价值观。像上面的行会没有值初始化变量。我也看到了在SQL语句的问题。它应在的形式的东西:插入到WSS1(逗号分隔的列名......)VALUES(逗号分隔的变量...){BR}还记得,varchar字段值需要他们周围的单引号。 
techankit
评论会员:游客 时间:2011/11/29
我是生物技术的学生,目前在项目工作..我要做的PERL编程开发一个数据库,使用一个文本文件,它包含数据..我想撰写关于这个方案..nyone能帮助我..
乔恩相良
评论会员:游客 时间:2011/11/29
也许这些链接将会给你援助(尤其是书籍):imgsrc=http://www.orcode.com/upimg/2011_11_29_05_03_35_0.gifimgsrc=http://www.orcode.com/upimg/2011_11_29_05_03_36_1.gif书籍:imgsrc=http://www.orcode.com/upimg/2011_11_29_05_03_37_2.gifimgsrc=http://www.orcode.com/upimg/2011_11_29_05_03_37_3.gifimgsrc=http://www.orcode.com/upimg/2011_11_29_05_03_17_4.gif我说没有盐,没有我玛格丽塔盐!{A5}
康德
评论会员:游客 时间:2011/11/29
http://www.top25web.com/bbs/index.php
乔恩相良
评论会员:游客 时间:2011/11/29
Web服务器上的PHP支持是必须的运行您的应用程序?如果Web服务器支持CGI-BIN,这就够了吗?我在PHP/Perl的新手区..{S2}{A6}{A7}
yarp
评论会员:游客 时间:2011/11/29
康德写道:是PHP在Web服务器上的支持是必须的运行您的应用程序?Nope!你只需要Perl5和MySQL的3.23.x.乔恩相良我有没有投诉"的指导理念??或婚姻观念或性观念。但是,如果你支付任何这些,这是错误的。-约翰T.里德{A8}
乔恩相良
评论会员:游客 时间:2011/11/29
这是一个很好的例子Perl代码。我目前正试图将它添加到我的网页,但我想知道应该是什么perlgb.cnf权利。像这样的cgi-bin文件夹下我的Perl脚本位于:/cgi-bin目录/HTML(这是我的网页在哪里)所以我放在cgi-bin目录下的Perl脚本。cnf的文件,但我已经得到了一个"错误的数据库连接"当我尝试读取该文件,我觉得它的权利。我的Perl脚本权限是711,我试图添加读。CNF的权利,但没有结果。Yarphttp://www.senosoft.com/
yarp
评论会员:游客 时间:2011/11/29
。尝试从命令提示符运行的Perl脚本,看到你什么确切的错误信息此外,在脚本中,并修改路径。CNF文件?仅供参考,在我的设置,我的CNF文件的权限是600(RW-------)。乔恩相良帮我在这里,斯波克。我不说愚蠢:乔恩相良
喜乔恩,

>此外,在脚本中,没有修改的路径。CNF文件?

是的,但我给它的绝对路径(完整的URL)

>在我的设置,我的。CNF文件的权限是600(RW -------)

好了,600是未成年人的许可,我可以看到。但我改名的文件passwd.etc。CNF真的有关吗?

我只是在Perl的初学者。我刚写了2脚本 - 网上商店,它是硬的。但您的留言我的眼睛,全是什么和如何我可以做的更好的脚本 - 以及为什么不给我留言{S3},所有感谢
开幕。

Yarp
http://www.senosoft.com/