从MySQL中选择3行
但只会得到第一个-名称。我只叫名字
$get = $dbh->prepare("select name, age, country from tble where me = ?");
$get->execute('john');
while(my @row = $get->fetchrow_array){
$results = $row[0],$row[1],$row[3];
}
我只是得到名字而没有其他行
答案 0 :(得分:2)
MySQL在这里是一个红鲱鱼。您正确使用了DBI,但是一旦从数据库中提取数据,它就会出错。
您的问题在于此行:
$results = $row[0],$row[1],$row[3];
这与运行此代码非常相似:
$x = 100, 200, 300;
如果您随后打印$x
,则会看到其中包含“ 100”。您在赋值运算符的右侧有三个项目,在左侧只有一个变量,因此最终只有一个值(第一个)分配给该变量。
我将在此处添加,如果您在代码中打开了use warnings
(并且所有优秀的Perl程序员总是打开了use strict
和use warnings
),那么您将获得一个警告“在无效上下文中无用的常量”,这表明存在问题。
您可以采取几种方法来解决此问题。而选择哪种,则取决于您要执行的操作。显而易见的解决方案是将$results
更改为数组:
@results = ($row[0], $row[1], $row[2]);
注意,我还在值列表中加上了括号。需要这些来告诉Perl这是一个列表分配。当然,这只是一种复杂的书写方式:
@results = @row;
另一种选择是将三个值转换为单个字符串。如果您要在代码的其他位置分别使用这些值,那么这不是一个好选择,但是如果您只想打印一些内容,则可以编写以下内容:
$results = "$row[0],$row[1],$row[2]";
同样,有一种更简单的方法可以写:
$results = join ',', @row;
答案 1 :(得分:1)
Name
,age
和country
不是行-它们是列。
您可以使用selectcol_arrayref仅获得一列:
$name_ref = $dbh->selectcol_arrayref(
q{
SELECT name
FROM tble
WHERE me = ?
},
{},
'john'
);
但是,如果要获得三列,则应使用selectall_arrayref
my $rows = $dbh->selectall_arrayref(
q{
SELECT name, age, country
FROM FROM tble
WHERE me = ?
},
{ Slice => {} },
'john'
);
foreach my $row ( @$rows ) {
print "$row->{'name'} aged $row->{'age'} from $row->{'country'}\n";
}