Kevin Spencer wrote:
Hi guys,
I'm sure I'm missing something *very* obvious but this one has me
scratching my head. Using DBI 1.52, DBD::mysql 3.0007, Perl 5.8.8,
MySQL 5.0.18.
The following code executes fine:
my $table = 'CCHISTORY';
my $status = 'D';
my $limit = 86400;
my $SQL = <<EOSQL;
select count(*) from $table
where TRXSTATUS = '$status'
and (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(TRXTIMESTAMP)) < $limit
EOSQL
my $sth = $dbh->prepare($SQL) || die $DBI::errstr, "\n";
$sth->execute() || die $sth->errstr(), "\n";
Now, because I want use use placeholders instead, I attempt the following:
my $SQL = <<EOSQL;
select count(*) from ?
where TRXSTATUS = ?
and (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(TRXTIMESTAMP)) < ?
EOSQL
You can't use place holders for table names or column selectors.
my $sth = $dbh->prepare($SQL) || die $DBI::errstr, "\n";
my $table = 'CCHISTORY';
my $status = 'D';
my $limit = 86400;
my @bindParams = ($table, $status, $limit);
$sth->execute(@bindParams) || die $sth->errstr(), "\n";
Which fails with:
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server for the right syntax to use near
''CCHISTORY'
and TRXSTATUS = 'D'
and (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(TRXTIMEST' at line 1
Anyone see an obvious error in my code that I'm overlooking?
Thanks.
--
Kevin.
Martin
--
Martin J. Evans
Easysoft Limited
http://www.easysoft.com