Beefy Boxes and Bandwidth Generously Provided by pair Networks RobOMonk
Just another Perl shrine
 
PerlMonks  

Re^2: Insert Row

by Rhandom (Curate)
on Dec 07, 2006 at 11:20 UTC ( [id://588382]=note: print w/replies, xml ) Need Help??

This is an archived low-energy page for bots and other anonmyous visitors. Please sign up if you are a human and want to interact.


in reply to Re: Insert Row
in thread Insert Row

And now a comment about simplifying things. I don't advocate Class::DBI or any of the other SQL abstraction modules - but you can cleanup your SQL generation.

Try this:
$table =~ tr/A-Za-z0-9_//cd; my @fields = keys %columns; my @values = values %columns; # or @columns{@fields} my $sql = "INSERT INTO $table (" .join(", ", @fields) .") VALUES (" .join(", ", ("?") x @fields) .")"; my $sth = $dbh->prepare($sql) || die $DBI::Errstr; $sth->execute(@values) || die $DBI::Errstr;


my @a=qw(random brilliant braindead); print $a[rand(@a)];

Replies are listed 'Best First'.
Re^3: Insert Row
by reneeb (Chaplain) on Dec 08, 2006 at 03:07 UTC
    You should use quote_identifier instead of tr///.

    $table = $dbh->quote_identifier($table);
      I most certainly agree. I never program in such a way that I am passing in arbitrary table names though and so I've never needed to look up the method that would quote it for me. Thankyou for pointing out the correct method.

      In all cases the name of the table could be validated before trying to use it in actual SQL - either by using "show tables" in MySQL or by "SELECT table_name FROM user_tables" in Oracle. Either way I would not be using the user supplied data in that portion of the SQL.

      my @a=qw(random brilliant braindead); print $a[rand(@a)];

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://588382]
help
Sections?
Information?
Find Nodes?
Leftovers?
    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.