【问题标题】:Why don't I get output for this DBI/MySQL query?为什么我没有得到这个 DBI/MySQL 查询的输出?
【发布时间】:2012-05-16 07:12:11
【问题描述】:

我用 Perl 编写了以下代码。我有适用于 Windows 7 的 ActivePerl 5.14。

#!C:\perl64\bin\perl.exe -wT
use strict;
use warnings;
use DBI;
print "Content-type: text/html \n\n";

# MYSQL CONFIG VARIABLES
my $driver     = "mysql";
my $database   = "test555";
my $tablename3 = "test77";

my $user = "root";
my $pw   = "root";

# PERL MYSQL CONNECT()
my $dbh = DBI->connect("DBI:$driver:$database", $user, $pw,);

my $sth = $dbh->prepare("
        SELECT *
          FROM t6
         WHERE paragraph='PWE1234'
    ");

$sth->execute();
#$dbh->disconnect;
#exit 0;

当程序到达$dbh->disconnect时,系统正在抛出错误;因此将其注释掉。当我将其注释掉时,系统没有抛出任何错误,但我也没有得到输出。

这个查询有结果,我单独用MySQL查过一次。

【问题讨论】:

  • 你没有打印任何东西,你为什么期待任何输出?
  • “系统抛出错误”...什么错误?
  • @gpojd,它抛出了一个错误 reg。语句句柄未关闭。因为我使用了 Strict,所以它正在呕吐。所以,在关闭数据库句柄之前,我给了语句句柄的完成语句。现在解决了!
  • @Mannii88,听起来您在关闭语句句柄之前没有获得所有记录。这可能是设计使然,但我不知道。我通常while (my $row = $sth->fetchrow) {...} 来获取所有行,然后我不需要$sth->finish
  • @gpojd,您能否举一个最新模块的示例...我正在尝试与来自网络的资源并行...我正在尝试使用哈希...我想打印数组。 ..带标题...

标签: mysql perl dbi activeperl


【解决方案1】:

没有输出,因为您没有创建任何输出的代码。

在调用execute 之后,您需要调用fetchsomething methods 之一,并对返回的数据结构做一些事情。

【讨论】:

  • 嗨@quentin,您能否提供一个示例或链接,我可以在其中找到一个实时示例...用于获取数组/哈希并在 perl 中打印它们..
  • 我可以通过打印,而 (@row = $sth->fetchrow_array()) { print "@row\n";但是,如果我想使用 for 语句,如何获取行数并给出循环......
  • 我怀疑你会找到很多(如果有的话)DBD,它们会告诉你所选行的行数,直到你真正获取它们,在这种情况下它几乎不重要。您可以使用 fetchall_arrayref/fetchall_hashref 来获取结果集中的所有行,但显然您需要内存来保存它们。您可以将 MaxRows 与这些方法一起使用,以限制每次调用返回的行数。 DBI 文档中有一些很好的例子。
  • $sth->rows() 将返回所选行数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 2019-05-14
相关资源
最近更新 更多