如何使用perl限制从文件插入数据到mysql

时间:2012-02-19 18:58:53

标签: mysql perl cgi

我对Perl相对较新。我一直在尝试使用CGI脚本从文本文件向数据库插入数据。我已经为它编写了代码并且它正常工作。但是当我尝试对数据施加限制时使用LIMIT关键字插入时出现问题。请检查我哪里出错以及需要修改的内容。谢谢你的建议。

这是代码

#!/usr/bin/perl

use warnings;
use strict;
use CGI ':standard';
use DBI;

if(param())
{
my @params=param();
my $limit=param('limit')||'';


my $dbh =DBI->connect("DBI:mysql:sample","root","");
my $var="LOAD DATA LOCAL INFILE 'C:/test.txt' INTO TABLE sample2 FIELDS TERMINATED       BY '\n' WHERE LIMIT 0,$limit";
my $sth = $dbh->do($var) or die "prepare failed: " . $dbh->errstr();
print $sth ."Records inserted";

$sth->finish();
$dbh->disconnect();

print
header(),
start_html(
-title=>'Welcome',
-text=>'#520063'
),
#h1("Records have been displayed"),
end_html();

}

else
{
print
header(),
start_html('A Simple Form'),
h1('Please enter the limit '),
start_form(),
'Limit: ',
textfield(-name=>'limit'),
br(),
#'Phone Number: ',
#textfield(-name => 'number'),
#br(),
submit(),
end_form(),
end_html();
} 

1 个答案:

答案 0 :(得分:2)

没有错误消息我不能完全确定,但问题很可能在你的SQL中。

LOAD DATA LOCAL INFILE 'C:/test.txt'
INTO TABLE sample2
FIELDS TERMINATED BY '\n'
WHERE LIMIT 0,$limit

有问题。

  • WHERE子句为空(LIMIT不是WHERE子句的一部分)
  • LOAD DATA INFILE不接受WHERE子句
  • LOAD DATA INFILE不接受LIMIT条款

基本上整个最后一行都行不通。通常,如果SQL命令在程序中不起作用,请尝试启动MySQL命令行并在那里调试命令。

LOAD DATA INFILE没有办法限制它会吸引多少行,this is an oft requested feature。为了解决这个问题,我建议在将文件提供给MySQL之前复制和截断文件。