DBI メソッドに問題があったことを覚えていますselectrow_array
。私が十分に整頓されていなかったとき、私が尋ねた列の値ではなく、列の数(または不要なもの、正確に思い出せません)が返されました。今、私はいくつかのコードをリファクタリングしようとしていますが、可能な限りすべての場所で、期待値のみが返されるようにしたいと考えています。だから私は驚きを避け、悪い行動が何であったかを見つけようとします. DBI docs から、これは本当に問題のある状況である可能性があることを読みました:
複数の列を持つステートメント ハンドルのスカラー コンテキストで呼び出された場合、ドライバーが最初の列の値を返すか最後の列の値を返すかは未定義です。だから、それをしないでください。また、スカラー コンテキストでは、行がなくなった場合やエラーが発生した場合は、"undef" が返されます。最初のフィールド値が NULL だったので、その「undef」は返された「undef」と区別できません。これらの理由から、「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
値