2012-02-19 8 views
0

私は比較的新しいPerlです。私は、CGIスクリプトを使ってテキストファイルからデータベースにデータを挿入しようとしています。しかし、LIMITキーワードを使用して挿入されたデータに制限を設けようとすると、problem.Pleaseがどこにあるのかを確認してください。何が修正される必要があるのか​​を確認してください。perlを使ってファイルからmysqlにデータを挿入する方法を制限する

は、ここで私は完全に確認することはできませんエラーメッセージを表示せずにコード

#!/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(); 
} 
+0

MySQLからエラーが発生しましたか? MySQLで直接コマンドを試しましたか?私は 'LOAD DATA'が' WHERE'節と 'LIMIT'節を取るとは思わない。 – Schwern

+0

''問題があります。 ''は非常に一般的で非常に悪い方法で問題を説明しています。誰かが医者に行くのを想像してみてください。「今朝起きたときに問題がありました。私の体は、何が間違っているのか教えてください。 – TLP

+0

@TLP医者:「そうだよ、太って醜い」 – Schwern

答えて

2

ですが、問題は、あなたのSQLで可能性があります。

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

問題があります。句が空であり

  • LOAD DATAのINFILEがかかりません(LIMITは、WHERE句の一部ではありません)句
  • は、LOAD DATA INFILEは、LIMIT句を取ることはありませんWHERE

基本的に最後の行全体が機能しません。一般に、SQLコマンドがプログラムで動作しない場合は、MySQLコマンドラインを起動してコマンドをデバッグしてみてください。

LOAD DATA INFILEには、取り込む行数を制限する方法がありません。this is an oft requested feature。この問題を回避するには、ファイルをコピーしてからMySQLに渡す前に切り捨てることをお勧めします。

+0

お返事ありがとうございます。 –

関連する問題