我有一张看起来像这样的表:
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;
答案 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;