http://qs321.pair.com?node_id=1148456


in reply to [Solved]: How to get only changed parameter names from CGI script on form submit?

I am running DB queries for each of those parameters

Somehow I doubt that each of these parameters correspond to columns in different tables. Most likely, you'll only need to update one or two tables for each submit in most circumstances. So instead of updating the database for each parameter1, you could do one or two mass updates2

# 1 # (I don't know which module you're using for your $query->Dump expres +sion, # so I'll simply be using the old school CGI.pm here) use CGI 'param'; use DBI; my $dbh = DBI->connect(...) or die ...; my $id = param 'id'; # Hit the database with an UPDATE for every parameter for my $p (param) { next if $p eq 'id'; my $sql = sprintf("UPDATE mytable SET %s = ? WHERE id = ?", $p) $dbh->do($sql, undef, param($p), $id); }
# 2 # (again, just CGI.pm) use CGI 'param'; use DBI; my $dbh = DBI->connect(...) or die ...; my $id = param 'id'; my %update = map { $_ ne 'id' ? ($_ => param($_)) : () } param; my @bind = (); # First, build one large UDPATE statement # and collect the bind values while we're at it my $sql = "UPDATE mytable SET " . # Doing this from the top + of my head, join(", ", # untested, but it should + get the grep defined, map { # idea across if ($_ ne 'id') { push @bind, param($_); sprintf "%s = ?", $_ } else { undef } } param ) ; # And then hit the database with that UPDATE statement just once. $dbh->do($sql, undef, bind);