$month=`date --date='1 month ago' +%B`; my $sth = $dbh->prepare("SELECT * from $table where monthname(Date)='$ +month'" );

This is a really bad example:

To clean up:

my $month=(localtime())[4]+1; ... my $sth=$dbh->prepare("SELECT * from $table where month(Date)=?"); $sth->execute($month); ...

Except that this still misses the "last month" logic. Quite easy to handle. The previous month number is current month number minus 1. If that is 0, replace it with 12.

my $month=(localtime())[4]+1; # last month: $month--; $month||=12; ... my $sth=$dbh->prepare("SELECT * from $table where month(Date)=?"); $sth->execute($month); ...

This still can be simplifed because localtime already returns current month number minus 1. And while we are at it, rename $month to $lastmonth.

my $lastmonth=(localtime())[4]||12; ... my $sth=$dbh->prepare("SELECT * from $table where month(Date)=?"); $sth->execute($lastmonth); ...

And the final bit to get rid of little bobby tables: $table may come from an untrusted source, or may just be a reserved word. DBI can handle this, too, for any database:

... my $sth=$dbh->prepare('SELECT * from '.$dbh->quote_identifier($table). +' where month(Date)=?'); ...

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)

In reply to Re^4: Problem passing date to SQL by afoken
in thread Problem passing date to SQL by JoeTheProgrammer

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.