查询数据库后,我无法再向浏览器打印数据和文本

时间:2010-02-16 16:49:38

标签: perl web-applications cgi

我在一个网络脚本课程中,老实说,不幸的是,它在我的网络和设计与分析课程中排名第二。因此,我发现我遇到的问题可能是平凡但无法轻易找到解决方案。

我正在编写一个可以与MySQL DB一起使用的CGI表单。我可以插入和删除到DB就好了。查询数据库时出现问题。

我的代码编译得很好,我在尝试通过浏览器“显示”数据库中的信息时没有出错,但实际上并没有显示数据和文本。有问题的代码在这里:

print br, 'test';

my $dbh = DBI->connect("DBI:mysql:austinc4", "*******", "*******", {RaiseError => 1} );
my $usersstatement = "select * from users";
my $projstatment = "select * from projects";

# Get the handle
my $userinfo = $dbh->query($usersstatement);
my $projinfo = $dbh->query($projstatement);

# Fetch rows
while (@userrow = $userinfo->fetchrow()) {
    print $userrow[0], br;
}

print 'end';

此代码位于if语句中,该语句由print header,start_html,form,/ form,end_html包围。我只是试图调试并找出发生了什么并打印语句测试并结束。它打印出测试但不打印结束。它也不打印我的数据库中的数据,这在我打印出来之前就已经发生了。

我相信我所做的是:

  • 连接到我的数据库
  • 形成一个字符串,其中包含对DB的命令/请求
  • 获取我在DB上执行查询的句柄
  • 从我的手柄中取一行
  • 打印从我的表格中提取的行中的第一个字段

但是我不明白为什么我的数据不会像最终文本一样打印出来。我查看了数据库,它确实包含数据库中的数据以及我试图从中获取数据的表。

这个让我难过,所以我感谢任何帮助。再次感谢。 =)

解决方案:

我使用的是我所包含的模块不支持的功能。这引出了另一个问题。我怎样才能发现这样的错误?事实上,我的程序确实正确编译,网页没有“破解”。除了我仔细检查我使用的所有方法是否有效,我是否只看到文本没有显示,并假设发生了这样的错误?

1 个答案:

答案 0 :(得分:1)

在阅读注释后,程序被破坏的原因是query()不执行SQL查询。因此,您可能正在调用未定义的子例程,除非这是您在其他地方定义的包装器。

以下是我原始发布的有用提示,仍然适用:

  1. 我希望您使用CGI,使用DBI等...并使用CGI :: Carp并使用严格;
  2. 查看/var/log/apache2/access.log或error.log中的错误
  3. 意识到CGI脚本打印的第一件事必须是有效的标题,或者Web服务器和浏览器变得不满意,并且通常不会显示任何其他内容。
  4. 由于#3在您执行任何操作之前首先打印标题,尤其是在您连接到脚本可能会死亡的数据库或打印其他内容之前,因为否则错误或其他消息将在标题之前发出。
  5. 如果您仍然没有看到错误,请返回#2。
  6. 使用CGI.pm的CGI可以在终端会话中从命令行运行,而无需通过Web服务器。这也是一种很好的调试方法。