使用预准备语句时,Perl DBD-Mysql会导致值损坏

时间:2012-08-27 20:33:20

标签: mysql perl dbi

我在随机替换期间收到以下错误:

DBD :: mysql :: st执行失败:错误的整数值:第1行第'列'列的'ð'

连续运行多个查询时出现此错误。它并不总是发生在同一条线上,并且这个错误并不总是完全相同。它是USUALLY“不正确的整数值”或“不正确的十进制值”,并且引号中的值总是更改并显示一些随机字符或字符集。

以下是我的代码生成的语句:

REPLACE INTO site SET id = ? ,sequence = ? ,sitenumber = ? ,startdate = ? ,enddate = ? ,damages = ? ,typedays = ? ,description = ?
当我转储传入的参数时,

Data :: Dumper显示以下内容:

print Dumper(@params);

$VAR1 = '300';
$VAR2 = '1';
$VAR3 = '0';
$VAR4 = undef;
$VAR5 = '2012-03-09';
$VAR6 = '130';
$VAR7 = undef;
$VAR8 = 'COMPOSITE';

当然,这些值会因查询失败而有所不同。它们总是有效的数据,实际的SQL查询在控制台中正确运行。

相关代码如下

$db->{sth} = $dbh->prepare_cached($sql, { dbi_dummy => __FILE__.__LINE__ }, 3);
$db->{sth}->execute(@params) ;

如下替换第一行可以防止错误,但我们的应用程序将从缓存中获得相当多的收益。

$db->{sth} = $dbh->prepare($sql, { dbi_dummy => __FILE__.__LINE__ });

任何想法?

要求提供更多信息:

  

$ mysql -V mysql Ver 14.14 Distrib 5.1.61,适用于redhat-linux-gnu   (x86_64)使用readline 5.1

     

$ cat / etc / * - 发布CentOS版本6.3(最终版)

     

DBD :: mysql.pm version 4.013

     

$ perl -v

     

这是为x86_64-linux-thread-multi构建的perl,v5.10.1(*)

0 个答案:

没有答案