再現コード的には use DBI; my $dbh = DBI->connect('dbi:mysql:test','root',''); my $sth = $dbh->prepare('select * from user limit ?'); # limit と ?の間に二個以上のスペース $sth->execute(1); # errorです。 DBD::mysqlの実装でSQLをパースしているところがバグっており、 bindの値がint扱いにならずにエラーになります。 ココ https://github.com/CaptTofu/DBD-mysql/blob/master/dbdimp.c#L594 回避するにはスペースを一個にする。 もしくはbind_paramで型指定してあげましょうのこと。