使用Perl DBI中的不完整数据

时间:2014-11-26 05:19:26

标签: mysql perl dbi

我有一张看起来像这样的表:

tagname   username    photos

john    John Walker    -

john       -         123.jpg

注意:“ - ”表示空白,即没有。

当我做以下陈述时,我的结果是空白。

"SELECT * FROM tableA where tagname=?"

尽管如此,以下声明给出了正确的结果“123.jpg”

"SELECT photos FROM tableA WHERE tagname=?"

但是,以下声明再次给出了空白。执行两个单独的SQL语句也无法正常工作。

"SELECT username & photos FROM tableA WHERE tagname=?"

我想将所有与标记名匹配的用户名加入@ArrayA以及所有与@ArrayB相同的标记名的照片。

示例代码如下。

my $tag = 'john';

my $sth = $dbh->prepare(qq(SELECT * FROM tableA WHERE tagname=? ));
$sth->execute($tag) or die "Could not connect to database: $DBI::errstr";

my @ArrayA = undef;
while (my $ABC = $sth->fetchrow_array) {
    push (@ArrayA, $ABC);
    }

print "Content-type: text/html\n\n";
print @ArrayA;

2 个答案:

答案 0 :(得分:2)

fetchrow_array返回一个数组。

将您的while循环更改为:

while (my @row = $sth->fetchrow_array) {
    push @ArrayA, \@row;
}

要查看@ArrayA的内容,请使用此选项:

use Data::Dumper;
print Dumper(\@ArrayA);

答案 1 :(得分:1)

由于其中一个字段为NULL,因此结果为空白字段。您将获得每行查询的结果只是0。您可以进行连接以达到您的要求。

  

SELECT CONCAT(用户名,照片)AS photo_name FROM tableA WHERE tagname =?

我认为,查询

  

SELECT username&照片来自tableA,其中tagname =?

是您的要求的错误选择。

现在您可以按如下方式编写程序:

my $tag = 'john';
my $sth = $dbh->prepare(qq{SELECT CONCAT( username , photos ) AS photo_name FROM tableA WHERE tagname=?});
$sth->execute($tag) or die "Could not connect to database: $DBI::errstr";

my @ArrayA = undef;
while (my $ABC = $sth->fetchrow_hashref()) {
     push (@ArrayA, $ABC->{photo_name});
}
print "Content-type: text/html\n\n";
print @ArrayA;