perl DBI mysql 在 LIMIT 子句中绑定变量

perl DBI mysql bind variables in LIMIT clause

在 perl 脚本中:如何将变量值绑定到 mysql 语句中的限制子句?

我正在编写一个 perl 脚本,它从 mysql-table 中读取一些数据。这是原始程序的简化版本:

#!/usr/bin/perl -w
use strict;
use warnings;
use DBI;

#db-name, user-name and pw are hidden here.
#In the real programm this part works fine.
my $dbh = DBI->connect('DBI:mysql:database=***;host=localhost','***','***');

#in the real script $from and $amount are parameters 
#that are sent to this program from another source
my $from = 0;
my $amount = 5;

my $sql = 'SELECT `RefID` FROM `referenz` WHERE `RefID` > ? ORDER BY `RefID` ASC LIMIT 0,?;';
my $sthGetData = $dbh->prepare($sql);
$sthGetData->execute($from,$amount);
while (my $ref = $sthGetData->fetchrow_hashref()) {
    if (defined($ref->{'RefID'})) {
        print $ref->{'RefID'}."\n";
    }
}
$dbh->disconnect();
exit(0);

问题似乎是sql-语句的LIMIT-子句中的?-符号:

LIMIT 0,?

语句中有一个类似的?-短语:

WHERE `RefID` > ?

但这没问题。我已经在其他脚本中多次这样做了。它工作正常。

当我执行脚本时,我得到这个错误:

DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''5'' at line 1 at ./problem.pl line 17.

看起来好像 $sthGetData->execute($from,$amount); 在它绑定到语句的每个值周围添加了单引号,结果是

 LIMIT 0,'5' 

而不是

 LIMIT 0,5

那么,我怎样才能避免出现这个错误呢?如何将变量值绑定到 mysql 语句中的限制子句?

Server-Typ: MySQL
Server Version: 5.6.19-0ubuntu0.14.04.1 - (Ubuntu)

LIMIT 的参数不是表达式,所以不能占位。

LIMIT {[offset,] row_count | row_count OFFSET offset}

LIMIT 0,?LIMIT 0,4+4

一样错误