テーブルを更新している間、sql NOW()関数を使用しようとしています。しかし、その日付フィールドには何も起こりません。DBIはその値を無視しているだけだと思います。コードは:
dbUpdate($id, (notes => 'This was an update', filesize => '100.505', dateEnd => 'NOW()'));
関数は次のとおりです。
sub dbUpdate {
my $id = shift;
my %val_hash = @_;
my $table = 'backupjobs';
my @fields = keys %val_hash;
my @values = values %val_hash;
my $update_stmt = "UPDATE $table SET ";
my $count = 1;
foreach ( @fields ) {
$update_stmt .= "$_ = ? ";
$update_stmt .= ', ' if ($count != scalar @fields);
$count++;
}
$update_stmt .= " WHERE ID = ?";
print "update_stmt is : $update_stmt\n";
my $dbo = dbConnect();
my $sth = $dbo->prepare( $update_stmt );
$sth->execute( @values, $id ) or die "DB Update failed : $!\n";
$dbo->disconnect || die "Failed to disconnect\n";
return 1;
}#dbUpdate
ご覧のとおり、これはSQLクエリの「動的」生成であるため、SQL日付関数(now()など)がどこにあるのかわかりません。
与えられた例では、SQLクエリは次のようになります
UPDATE backupjobs SET filesize = ? , notes = ? , dateEnd = ? WHERE ID = ?
パラメータ値付き
100.55, This was an update, NOW(), 7
ただし、日付列にはまだ0000-00-.......が表示されます。
これを修正する方法はありますか?