我正在尝试使用 perl 将 CSV 文件上传到 mysql 数据库。我的 perl 脚本将驻留在服务器上,我将通过浏览器访问它。在浏览器中,将有一个上传文件的选项。
问题是,我到底要怎么做
- 我是否需要将该文件保存在服务器上的某个位置然后使用它?
- 我可以通过提供固定路径直接使用笔记本电脑中的文件吗?
到目前为止,我尝试这样做
if($update eq "fullLoad"){
$filename = param("customPricing");
my $upload_filehandle = upload("customPricing");
open ( UPLOADFILE, ">$filename" ) or die "$!";
binmode UPLOADFILE;
while ( <$upload_filehandle> )
{
print UPLOADFILE;
}
close UPLOADFILE;
$query = "LOAD DATA INFILE '\bigmac\bm_src\html\cgi-bin\testbrocade\$filename' INTO TABLE customPricingTest FIELDS TERMINATED BY ','";
$sth = $dbh->do($query) or die "SQL Error: $DBI::errstr\n";
print $sth . "Records Uploaded
";
已编辑 --> 上面的代码抛出错误 Access Denied for user 。我能够成功地在服务器上创建文件,但看起来我在访问它时遇到错误。有什么想法吗?
谢谢,尼特什
在回答问题 1 时:如果您正在使用 LOAD DATA INFILE
,是的,服务器系统和数据库用户需要可以访问该文件。如果您使用LOAD DATA LOCAL INFILE
,文件可以保留在一个单独的系统上,由 Perl 脚本运行,并在网络连接中上传数据。两者之间存在权限和设置差异,但两种方式的性能都非常好,无论是本地加载数据还是远程加载数据,我们都没有看到巨大差异。
对于第二个问题,这就是LOAD DATA LOCAL INFILE
的作用。在这里,因为文件是通过 DBI 连接读取和传递的,所以文件路径需要相对于脚本运行的位置。它不需要像 LOAD DATA INFILE
那样是绝对的。它甚至不需要是固定路径。我们已经成功地将临时文件用于此目的,只要在您与数据库断开连接之前不删除这些文件即可。
Tôi là một lập trình viên xuất sắc, rất giỏi!