简体   繁体   English

MYSQL LOAD DATA INFILE 正确的文件路径

[英]MYSQL LOAD DATA INFILE correct file path

I'm attempting to upload a zip file of CSVs (exported from my DB) into mysql tables using LOAD DATA INFILE我正在尝试使用 LOAD DATA INFILE 将 CSV 的 zip 文件(从我的数据库中导出)上传到 mysql 表中

Mysql seems to be getting the wrong path: Mysql 似乎走错了路:

For example, the following:例如,以下内容:

C:\xampp\htdocs\site/uploads/temp/1620203716052941000/ck_address_change.csv C:\xampp\htdocs\site/uploads/temp/1620203716052941000/ck_address_change.csv

returns this error: C:\xampp\mysql\data\xampphtdocssite\uploads\temp\1620203716052941000\ck_address_change.csv not found (Errcode: 2 "No such file or directory")返回此错误:C:\xampp\mysql\data\xampphtdocssite\uploads\temp\1620203716052941000\ck_address_change.csv not found (Errcode: 2 "No such file or directory)

//Get file and create directory
$file = $_FILES['import_zip']['tmp_name'];
$rand = preg_replace('/(0)\.(\d+) (\d+)/', '$3$1$2', microtime()); //random folder name as will be deleted later
mkdir(dirname(__DIR__).'/uploads/temp/'.$rand, 0777);
$path = dirname(__DIR__).'/uploads/temp/'.$rand;

//Open Zip
$zip = new ZipArchive;
$res = $zip->open($file);
if($res === TRUE) {
    $zip->extractTo($path);
    $zip->close();  
} 

//Loop files
$files = array_diff(scandir($path), array('.', '..'));  
foreach($files as $file){
    $table_name = rtrim($file,'.csv');
    $upload = $path.'/'.$file;
    $q = "LOAD DATA INFILE '".$upload."' INTO TABLE $table_name";
    $results = mysqli_query($db,$q) or die(mysqli_error($db));
    if(!$results) {
        printf("Error message: %s\n", mysqli_error($db));     
    }   
}

//Remove Directory
array_map('unlink', glob("$path/*.*"));
rmdir($path);

How do I set the path properly for this?如何为此正确设置路径? Or is this an issue on my local server?或者这是我本地服务器上的问题?

Note this is just for testing use on my local server so no security issues etc.请注意,这仅用于在我的本地服务器上进行测试,因此没有安全问题等。

Working code - replaced forward slashes with backslashes in the path.工作代码 - 用路径中的反斜杠替换正斜杠。

//Get file and create directory
$file = $_FILES['import_zip']['tmp_name'];
$rand = preg_replace('/(0)\.(\d+) (\d+)/', '$3$1$2', microtime()); //random folder name as will be deleted later
mkdir(dirname(__DIR__).'/files/temp/'.$rand, 0777);
$path = dirname(__DIR__).'/files/temp/'.$rand;

//Open Zip
$zip = new ZipArchive;
$res = $zip->open($file);
if($res === TRUE) {
    $zip->extractTo($path);
    $zip->close();  
} 

//Loop files
$files = array_diff(scandir($path), array('.', '..'));  
foreach($files as $file){
    $table_name = rtrim($file,'.csv');
    $upload = $path.'\\'.$file;
    $upload = str_replace('/','\\', $upload);
    $upload = str_replace('\\', '\\\\', $upload);
    $q = "LOAD DATA INFILE '$upload' INTO TABLE $table_name";
    $results = mysqli_query($db,$q) or die(mysqli_error($db));
    if(!$results) {
        printf("Error message: %s\n", mysqli_error($db));     
    }   

}

//Remove Directory
array_map('unlink', glob("$path/*.*"));
rmdir($path);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM