PERL - DBD :: mysql :: st执行失败:MySQL客户端内存不足

时间:2014-04-23 19:55:11

标签: mysql perl

我研究了一下,发现使用mysql_use_result=1可以缓解内存问题。但是,由于我是新手DBI module,我不明白这里发生了什么:

#!/usr/bin/perl -w

use strict;
use DBI;


my $dbh = DBI>connect('DBI:mysql:blah;host=blah.blah.blah.blah;mysql_use_result=1','blah','blah',{RaiseError => 1});

my $sth = $dbh->prepare('select * from TaqMinute where tradeDate<=\'2014-04-22\' and symbol<=\'AAPL\' ;') ;

if (defined($sth)) {
        $sth->execute();
    my @row;
    while (@row = $sth-> fetchrow_array()) {
       print "@row\n" ;
    }
}
$sth->finish();


$dbh->disconnect

在我添加mysql_use_result=1之前,脚本会在大约1.5分钟后因抱怨内存不足而失败。添加后我的查询参数被忽略,我只是获取数据库中的所有数据。

如何帮助我或如何正确使用此switch的任何想法?顺便说一句,我查询的数据库非常大。

提前致谢!

克雷格

1 个答案:

答案 0 :(得分:1)

尝试使用参数化查询,可能是您的qoutes出了问题。

my $dbh = DBI>connect('DBI:mysql:blah;host=blah.blah.blah.blah','blah','blah',{RaiseError => 1});
my $sth = $dbh->prepare_cached('select * from TaqMinute where tradeDate<=? and symbol<=?') ;
die "sth undef!" if ! defined $sth;
$sth->execute('2014-04-22','AAPL');
while (my $rowref = $sth->fetchrow_arrayref()) {
 print Dumper($rowref) ;
}
$sth->finish;