在perl中使用LOAD DATA INFILE在MYSQL中插入值

前端之家收集整理的这篇文章主要介绍了在perl中使用LOAD DATA INFILE在MYSQL中插入值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用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 <br/>";

}

已编辑 – >上面的代码用户抛出错误Access Denied.我成功地能够在服务器上创建文件,但看起来我正在获取访问它的错误.任何想法?

谢谢,
Nitesh

解决方法

回答问题1:如果您正在使用LOAD DATA INFILE,是的,该文件需要可供服务器系统和数据库用户访问.如果使用LOAD DATA LOCAL INFILE,则该文件可以保留在单独的系统上,由Perl脚本运行,并且数据将在网络连接中上载.两者之间存在权限和设置差异,但无论哪种方式都表现非常好,我们没有看到在本地或远程加载数据方面存在巨大差异.

对于第二个问题,这就是LOAD DATA LOCAL INFILE的用途.这里,因为文件是通过DBI连接读取和传递的,所以文件路径需要相对于脚本运行的位置.它不需要像LOAD DATA INFILE那样绝对.它甚至不需要是固定的路径.我们已成功使用临时文件,只要在您与数据库断开连接之后才删除文件.

猜你在找的Perl相关文章