プログラマ的に読みやすいSQL文を書く Perl コード
私が通常使っているのは、以下のようなコードです。
#インサートする値は、%val に格納。ハッシュのキーがカラム名
#値を変更する場合は、ここから編集すればよい
#クオートが必要な値(文字列)
foreach (qw(subject description)){
#値が空文字列でないことは予め確認しておく
$val{$_} = $dbh->quote($query->Vars->{$_});
}
#クオート不要な値(数値)
foreach (qw(price quantity)){
#値が数値か数値を表す文字列であることは予め確認しておく
$val{$_} = $query->Vars->{$_};
}
#他に、必要な値を設定
$val{'time'} = time;
$val{'source'} = "'web'"; #文字列指定はクオートする
$val{'approval'} = 'NULL'; #データベースのキーワードはそのまま設定
$val{'point'} = 1000; #数値はそのまま設定。$val{'point'} = "1000" としても同。
#値を変更する場合は、ここまで編集すればよい
#SQL文作成(ここから先は一度書いたらいじらなくて良い)
@sort = keys %val; #カラム名を配列に格納。順番が固定される。
$sql = "INSERT INTO $tablename ( ";
$sql .= join(" , ", @sort); #ここで、カラム名を順番にカンマで結ぶ
$sql .= " ) VALUES ( ";
#以下の1行で、値を順番にカンマで結ぶ
$sql .= join(" , ", @val{@sort});
$sql .= " ); ";
この方式だと、カラムを増やすのも減らすのもハッシュ(%val)をコントロールすればよいだけなので、楽です。