$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". ;-)
| [reply] [d/l] [select] |
Alexander's post doesn't even mention that you seem not to care about the year.
And your solution is somewhat inflexible because it can't be simply changed from month to week or 14 days or whatever.
I did upvote anyway, because of Tim Toady: Taking the month name makes it completely clear you want the data of the complete month.
| [reply] |