我对 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();
}
最佳答案
如果没有错误消息,我无法完全确定,但问题可能出在您的 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 之前复制并截断该文件。
关于mysql - 如何使用perl限制从文件向mysql插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9352173/