我记得 DBI 方法有问题selectrow_array
。当我不够整洁时,我从中得到的不是我问的列的值,而是列数(或不需要的东西,我记不清了)。现在我尝试重构一些代码,并且我想确保在每个可能的地方,我只得到预期值。所以我尽量避免意外并找出不良行为是什么。从 DBI 文档中,我读到这可能确实是有问题的情况:
如果在标量上下文中为具有多于一列的语句句柄调用,则未定义驱动程序将返回第一列的值还是最后一列的值。所以不要那样做。此外,在标量上下文中,如果没有更多行或发生错误,则返回“undef”。无法将“undef”与返回的“undef”区分开来,因为第一个字段值为 NULL。由于这些原因,如果您在标量上下文中使用“selectrow_array”,或者干脆不这样做,您应该谨慎行事。
我仍然不能强制selectrow_array
返回除了值之外的任何东西col1
(这就是我所期望的)
my $query = 'SELECT col1, col2, col3 FROM table WHERE id = 112233';
my ( $c ) = ( $dbh->selectrow_array( $query ) );
my $x = ask_from_db();
my $y = $dbh->selectrow_array( $query );
my $z = ( $dbh->selectrow_array( $query ) );
my @A = $dbh->selectrow_array( $query );
say "C: $c"; # C: col1
say "X: $x"; # X: col1
say "Y: $y"; # Y: col1
say "Z: $z"; # Z: col1
say "A: @A"; # A: col1 col2 col3
sub ask_from_db {
return $dbh->selectrow_array( $query );
}
我在上面问的每一种方式,都给了我很好的结果。我应该如何运行查询以获得错误的结果?
结果错误!=col1
值