1

2 つの mysql コマンドがあります。検索する必要がある残りのデータ用に、これら 2 つの mysql コマンドを使用してサブルーチンを作成したいと考えています。たくさんのエントリーがあります。2 つの mysql コマンドに入力した実際の数字と文字の代わりに、置き換えることができる変数を入力して、それらの変数とコマンドの実際の値をコピーして貼り付けることができるように、サブルーチンを作成する方法はありますか?残りのエントリに対して実行されますか?

たとえば、次のコマンドがあります

$sth = $dbh->prepare ("select name from table1 where number > 5");
$sth->execute();
@row;
while (@row = $sth->fetchrow_array) {
print "$row[0]\tquestion1\n";

selectコマンドの「5」やprintコマンドの「question1」の代わりに「変数」などを入れて、これらのコマンドを使ったサブルーチンを作りたいのですが、これらの変数に異なる値を差し込むことで、サブルーチンを何度も実行できます。

このようなもの: $dbh = DBI->connect($dsn, $user, $password); mysql perl でこれを行う方法がわかりません。

4

2 に答える 2

2

クエリでプレースホルダーを使用して、検索で異なる値を使用できます。

$sth = $dbh->prepare ("select name from table1 where number > ?");
$sth->execute(5);

その後、印刷用のサブルーチンを作成するのは簡単です。

例えば:

my @values = qw(5 10 15 20);
my @fields = qw(question1 question2);
# ... other code..
my $sth = $dbh->prepare ("select name from table1 where number > ?");

for my $field (@fields) {
    for my $value (@values) {
        printfields($sth, $value, $field);
    }
}

sub printfields {
    my ($sth, $value, $field) = @_;
    $sth->execute($value);
    while (my @row = $sth->fetchrow_array) {
        print "$row[0]\t$field\n";
    }
}
于 2013-02-28T22:37:11.847 に答える
0

prepare() を実行する前に選択クエリを作成することをお勧めします。次に、それをスカラーとして prepare() に渡します。また、スカラーにプレースホルダーを追加することもできます (クエリごとに単純に再構築したくない場合)。これは、s///; の呼び出しを介して簡単に置き換えることができ、同様に簡単に名前を付けたり識別したりできます。これにより、execute() にそのままの値を渡すよりも、コードが少し読みやすくなります。

于 2013-03-01T03:21:33.447 に答える