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

标签 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();
} 

最佳答案

如果没有错误消息,我无法完全确定,但问题可能出在您的 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/

相关文章:

php - 在 Foreach 循环内按键、多维数组对值进行分组 - PHP

java - Java 中有 Perl 实现吗?

perl - 如何拆分三个不同的分隔符然后 ucfirst 每个结果[]?

perl - 如果要测试的模块不可用,我应该如何终止 perl 测试脚本?

javascript - 通过 javascript 执行 CGI 脚本

python - 如何在没有密码的情况下从 Apache 中的脚本连接到本地 postgres 数据库

mysql - 如何优化这个完整的查询?

php - 使用PHP在HTML中显示MySQL

mysql - 是否有任何Linux命令来查找mysql数据库的内存消耗?

ruby-on-rails - HTTP 请求从 Web 服务器分派(dispatch)到 CGI/FastCGI 进程