2013-02-14 29 views
1

下面是我的Perl代码 我提到以下链接http://www.tol.it/doc/MySQL/chapter6.html。如果有更好的请发布。 使用Mysql;LOAD DATA INFILE MySQL的语句在Perl错误处理

my $db = Mysql->connect($mysqlhost, $mysqlDB, $mysqlUser, $mysqlPassword); 
$db->selectdb("$mysqlDB"); 
my $loadQuery="LOAD DATA INFILE '$filename' INTO TABLE $pageURLTable FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n'"; 
print "Executing $loadQuery";  
my $loadresult=$db->query($loadQuery);  
if(!$loadresult){ 
    print "Error: MySQl Load failed.System error message:$!."; 
    return -1; 
} 
print "Info:".$loadresult->info"; ## this raises error MySQL::Statement info not loadable; 

有什么不对? 您能否提供编码这一点,以便加载数据文件错误得以更好的捕捉更好的办法?

感谢, Neetesh

+1

什么是错的,会发生什么? – 2013-02-14 14:07:24

+0

加载文件正在工作。我很担心这种情况,因为我会根据加载文件步骤的状态采取一些措施来拒收。我想至少打印加载文件执行的输出。但$ loadresult-> info引发错误。 – 2013-02-14 19:00:14

回答

0

尝试使用 - >做的方法,而不是 - >查询。 确保在数据库中启用了加载数据内联。 如果以上不行,可以使用system(mysql -e“LOAD DATA INFILE ...”)

+0

如果我使用$ DB->做($ loadquery子)我得到这个错误 “的Mysql :: DO:在MySQL而不是autoloadable未定义(最后尝试做)......”。此外,我不能使用系统(mysql -e ...),因为我有进一步的步骤取决于负载的状态。 – 2013-02-14 18:55:54

0

我一般使用DBI recipes。 “执行sql语句”我喜欢做$ rows = $ sth-> execute();通过上一条语句提供受影响的行,并且如果在加载csv文件后行> 0,我知道我已经成功地将数据加载到数据库中。

my $sth = $dbh->prepare($sql) 
    or die "Can't prepare SQL statement: ", $dbh->errstr(), "\n"; 
$rows = $sth->execute(); 
if ($rows>0) 
{ 
    print "Loaded $rows rows\n" if ($Debug); 
} 
else { 
    print "Can't execute SQL statement: ", $sth->errstr(), "\n"; 
}