$month=`date --date='1 month ago' +%B`; my $sth = $dbh->prepare("SELECT * from $table where monthname(Date)='$ +month'" );
This is a really bad example:
Don't ask me what happens on other systems without GNU's date. I would expect to see errors, unexpected output, or both.Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Users\alex>date --date='1 month ago' +%B The system cannot accept the date entered. Enter the new date: (dd-mm-yy)
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
In reply to Re^4: Problem passing date to SQL
by afoken
in thread Problem passing date to SQL
by JoeTheProgrammer
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |