导入带有反斜线csv

utugiqy6  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(205)

我正在尝试用php页面导入一个csv文件到mysql里面,遇到了一个问题,它被忽略了。我该怎么解决呢?我留下了import.php文件的代码,先谢谢你了。
C:用户桌面链接logo_ariel.png
C:\Users\venic\Desktop\link\logo_ariel.png
安德里亚

<?php
include_once("db_connect.php");
if(isset($_POST['import_data'])){    
    // validate to check uploaded file is a valid csv file
    $file_mimes = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain');
    if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'],$file_mimes)){
        if(is_uploaded_file($_FILES['file']['tmp_name'])){   
            $csv_file = fopen($_FILES['file']['tmp_name'], 'r');           
            //fgetcsv($csv_file);            
            // get data records from csv file
            while(($emp_record = fgetcsv($csv_file)) !== FALSE){
                // Check if employee already exists with same email
                $sql_query = "SELECT emp_id, campo_1a, campo_1b, campo_1a_1, campo_1c, campo_2a, campo_2b, campo_3a, campo_3a_1, campo_3b, campo_3c, campo_4a, campo_5a, campo_5b, campo_6a, campo_7a, campo_7b, campo_8a, campo_8b, campo_9a, campo_9b, campo_10a, campo_10b, campo_10a1, campo_10b1, campo_11a, campo_11b, campo_12a, campo_12b, campo_13a, campo_13b, campo_13c, campo_14, campo_15, campo_16, campo_17, campo_18, campo_19, campo_20, campo_21a, campo_21b, campo_21c1, campo_21c2, campo_21c3, campo_21c4, campo_21d, campo_30a, campo_30b, campo_30c, campo_31, campo_32, campo_33, campo_34, campo_35, campo_35_1, campo_36, campo_37, campo_38, campo_39, campo_39_1, campo_40, campo_41, campo_42, campo_43, quantita_d, quantita_e FROM emp WHERE campo_22 = '".$emp_record[1]."'";
                $resultset = mysqli_query($conn, $sql_query) or die("database error:". mysqli_error($conn));
                // if employee already exist then update details otherwise insert new record
                if(mysqli_num_rows($resultset)) {                     
                    $sql_update = "UPDATE emp set campo_1a='".$emp_record[2]."', campo_1b='".$emp_record[3]."', campo_1a_1='".$emp_record[4]."', campo_1c='".$emp_record[5]."', campo_2a='".$emp_record[6]."', campo_2b='".$emp_record[7]."', campo_3a='".$emp_record[8]."', campo_3a_1='".$emp_record[9]."', campo_3b='".$emp_record[10]."', campo_3c='".$emp_record[11]."', campo_3d='".$emp_record[12]."', campo_4a='".$emp_record[13]."', campo_5a='".$emp_record[14]."', campo_5b='".$emp_record[15]."', campo_6a='".$emp_record[16]."', campo_6b='".$emp_record[17]."', campo_7a='".$emp_record[18]."', campo_7b='".$emp_record[19]."', campo_8a='".$emp_record[20]."', campo_8b='".$emp_record[21]."', campo_9a='".$emp_record[22]."', campo_9b='".$emp_record[23]."', campo_10a='".$emp_record[24]."', campo_10b='".$emp_record[25]."', campo_10a1='".$emp_record[26]."', campo_10b1='".$emp_record[27]."', campo_11a='".$emp_record[28]."', campo_11b='".$emp_record[29]."', campo_12a='".$emp_record[30]."', campo_12b='".$emp_record[31]."', campo_13a='".$emp_record[32]."', campo_13b='".$emp_record[33]."', campo_13c='".$emp_record[34]."', campo_14='".$emp_record[35]."', campo_15='".$emp_record[36]."', campo_16='".$emp_record[37]."', campo_17='".$emp_record[38]."', campo_18='".$emp_record[39]."', campo_19='".$emp_record[40]."', campo_20='".$emp_record[41]."', campo_21a='".$emp_record[42]."', campo_21b='".$emp_record[43]."', campo_21c1='".$emp_record[44]."', campo_21c2='".$emp_record[45]."', campo_21c3='".$emp_record[46]."', campo_21c4='".$emp_record[47]."', campo_21d='".$emp_record[48]."', campo_30a='".$emp_record[49]."', campo_30b='".$emp_record[50]."', campo_30c='".$emp_record[51]."', campo_31='".$emp_record[52]."', campo_32='".$emp_record[53]."', campo_33='".$emp_record[54]."', campo_34='".$emp_record[55]."', campo_35='".$emp_record[56]."', campo_35_1='".$emp_record[57]."', campo_36='".$emp_record[58]."', campo_37='".$emp_record[59]."', campo_38='".$emp_record[60]."', campo_39='".$emp_record[61]."', campo_39_1='".$emp_record[62]."', campo_40='".$emp_record[63]."', campo_41='".$emp_record[64]."', campo_42='".$emp_record[65]."', campo_43='".$emp_record[66]."', quantita_d='".$emp_record[67]."', quantita_e='".$emp_record[68]."' WHERE campo_22 = '".$emp_record[1]."'";
                    mysqli_query($conn, $sql_update) or die("database error:". mysqli_error($conn));
                } else{
                    $mysql_insert = "INSERT INTO emp (campo_22, campo_1a,  campo_1a_1, campo_1b, campo_1c, campo_2a, campo_2b, campo_3a, campo_3a_1, campo_3b, campo_3c, campo_3d, campo_4a, campo_5a, campo_5b, campo_6a, campo_6b, campo_7a, campo_7b, campo_8a, campo_8b, campo_9a, campo_9b, campo_10a, campo_10b, campo_10a1, campo_10b1, campo_11a, campo_11b, campo_12a, campo_12b, campo_13a, campo_13b, campo_13c, campo_14, campo_15, campo_16, campo_17, campo_18, campo_19, campo_20, campo_21a, campo_21b, campo_21c1, campo_21c2, campo_21c3, campo_21c4, campo_21d, campo_30a, campo_30b, campo_30c, campo_31, campo_32, campo_33, campo_34, campo_35, campo_35_1, campo_36, campo_37, campo_38, campo_39, campo_39_1, campo_40, campo_41, campo_42, campo_43, quantita_d, quantita_e)VALUES('".$emp_record[1]."', '".$emp_record[2]."', '".$emp_record[3]."', '".$emp_record[4]."', '".$emp_record[5]."', '".$emp_record[6]."', '".$emp_record[7]."', '".$emp_record[8]."', '".$emp_record[9]."', '".$emp_record[10]."', '".$emp_record[11]."', '".$emp_record[12]."', '".$emp_record[13]."', '".$emp_record[14]."', '".$emp_record[15]."', '".$emp_record[16]."', '".$emp_record[17]."', '".$emp_record[18]."', '".$emp_record[19]."', '".$emp_record[20]."', '".$emp_record[21]."', '".$emp_record[22]."', '".$emp_record[23]."', '".$emp_record[24]."', '".$emp_record[25]."', '".$emp_record[26]."', '".$emp_record[27]."', '".$emp_record[28]."', '".$emp_record[29]."', '".$emp_record[30]."', '".$emp_record[31]."', '".$emp_record[32]."', '".$emp_record[33]."', '".$emp_record[34]."', '".$emp_record[35]."', '".$emp_record[36]."', '".$emp_record[37]."', '".$emp_record[38]."', '".$emp_record[39]."', '".$emp_record[40]."', '".$emp_record[41]."', '".$emp_record[42]."', '".$emp_record[43]."', '".$emp_record[44]."', '".$emp_record[45]."', '".$emp_record[46]."', '".$emp_record[47]."', '".$emp_record[48]."', '".$emp_record[49]."', '".$emp_record[50]."', '".$emp_record[51]."', '".$emp_record[52]."', '".$emp_record[53]."', '".$emp_record[54]."', '".$emp_record[55]."', '".$emp_record[56]."', '".$emp_record[57]."', '".$emp_record[58]."', '".$emp_record[59]."', '".$emp_record[60]."', '".$emp_record[61]."', '".$emp_record[62]."', '".$emp_record[63]."', '".$emp_record[64]."', '".$emp_record[65]."', '".$emp_record[66]."', '".$emp_record[67]."', '".$emp_record[68]."')";
                    mysqli_query($conn, $mysql_insert) or die("database error:". mysqli_error($conn));
                }
            }            
            fclose($csv_file);
            $import_status = '?import_status=success';
        } else {
            $import_status = '?import_status=error';
        }
    } else {
        $import_status = '?import_status=invalid_file';
    }
}
header("Location: index.php".$import_status);
?>
8ftvxx2r

8ftvxx2r1#

您应该准备一个参数化查询,然后将值绑定到该查询。
这有许多好处,
1.防止SQL注入。
1.您可以自动安全地处理奇怪的数据,如名称Peter O'TooleC:\
1.您可以只准备一次查询,然后在循环中重复使用它,每次执行查询时应用不同的数据。这意味着您可以减少往返服务器的次数以及服务器运行查询所需的工作量

<?php
include_once("db_connect.php");

if(isset($_POST['import_data'])){    
    // validate to check uploaded file is a valid csv file
    $file_mimes = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain');
    if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'],$file_mimes)){
        if(is_uploaded_file($_FILES['file']['tmp_name'])){   
            $csv_file = fopen($_FILES['file']['tmp_name'], 'r');           

            // prepare the 2 statements, only once, run them multiple times
            // this reduces round trips to the server and makes everything a bit faster

            $sql = "UPDATE emp 
                        set campo_1a = ?, campo_1b= ?, campo_1a_1= ?, campo_1c = ?, 
                            campo_2a = ?, campo_2b = ?, campo_3a = ?, campo_3a_1 = ?, 
                            campo_3b = ?, campo_3c = ?, campo_3d = ?, campo_4a = ?, 
                            campo_5a = ?, campo_5b = ?, campo_6a = ?, campo_6b = ?, 
                            campo_7a = ?, campo_7b = ?, campo_8a = ?, campo_8b = ?, 
                            campo_9a = ?, campo_9b = ?, campo_10a = ?, campo_10b = ?, 
                            campo_10a1 = ?, campo_10b1 = ?, campo_11a = ?, campo_11b = ?, 
                            campo_12a = ?, campo_12b = ?, campo_13a = ?, campo_13b = ?, 
                            campo_13c = ?, campo_14 = ?, campo_15 = ?, campo_16 = ?, 
                            campo_17 = ?, campo_18 = ?, campo_19 = ?, campo_20 = ?, 
                            campo_21a = ?, campo_21b = ?, campo_21c1 = ?, campo_21c2= ?, 
                            campo_21c3 = ?, campo_21c4 = ?, campo_21d = ?, campo_30a = ?, 
                            campo_30b= ?, campo_30c = ?, campo_31 = ?, campo_32= ?, 
                            campo_33 = ?, campo_34 = ?, campo_35 = ?, campo_35_1 = ?, 
                            campo_36 = ?, campo_37 = ?, campo_38 = ?, campo_39 = ?, 
                            campo_39_1 = ?, campo_40 = ?, campo_41 = ?, campo_42= ?, 
                            campo_43 = ?, quantita_d = ?, quantita_e = ?
                    WHERE campo_22 = ?";
            $update_stmt = $conn->prepare($sql);
            
            $sql = "INSERT INTO emp 
                    (campo_22, campo_1a,  campo_1a_1, campo_1b, campo_1c, campo_2a, 
                    campo_2b, campo_3a, campo_3a_1, campo_3b, campo_3c, campo_3d, campo_4a, 
                    campo_5a, campo_5b, campo_6a, campo_6b, campo_7a, campo_7b, campo_8a, 
                    campo_8b, campo_9a, campo_9b, campo_10a, campo_10b, campo_10a1, campo_10b1, 
                    campo_11a, campo_11b, campo_12a, campo_12b, campo_13a, campo_13b, campo_13c, 
                    campo_14, campo_15, campo_16, campo_17, campo_18, campo_19, campo_20, 
                    campo_21a, campo_21b, campo_21c1, campo_21c2, campo_21c3, campo_21c4, 
                    campo_21d, campo_30a, campo_30b, campo_30c, campo_31, campo_32, campo_33, 
                    campo_34, campo_35, campo_35_1, campo_36, campo_37, campo_38, campo_39, 
                    campo_39_1, campo_40, campo_41, campo_42, campo_43, quantita_d, quantita_e)
                VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
                        ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

            $insert_stmt = $conn->prepare($sql);

            while(($emp_record = fgetcsv($csv_file)) !== FALSE){
                // Check if employee already exists with same email
                $sql = "SELECT COUNT(campo_22) as cnt FROM emp WHERE campo_22 = ?";
                $check = $conn->prepare($sql);
                $check->bind_param('s', $emp_record[1]);
                $check->execute();
                $cnt = $check->get_result()->fetch_row()[0];
                
                // if employee already exist then update details otherwise insert new record
                if($cnt = 1) {  
                    // UPDATE existng row 67 columns
                    $update_stmt->bind_param('sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss',
                                $emp_record[2], $emp_record[3], $emp_record[4], $emp_record[5], 
                                $emp_record[6], $emp_record[7], $emp_record[8], $emp_record[9], 
                                $emp_record[10], $emp_record[11], $emp_record[12], $emp_record[13], 
                                $emp_record[14], $emp_record[15], $emp_record[16], $emp_record[17], 
                                $emp_record[18], $emp_record[19], $emp_record[20], $emp_record[21], 
                                $emp_record[22], $emp_record[23], $emp_record[24], $emp_record[25], 
                                $emp_record[26], $emp_record[27], $emp_record[28], $emp_record[29], 
                                $emp_record[30], $emp_record[31], $emp_record[32], $emp_record[33], 
                                $emp_record[34], $emp_record[35], $emp_record[36], $emp_record[37], 
                                $emp_record[38], $emp_record[39], $emp_record[40], $emp_record[41], 
                                $emp_record[42], $emp_record[43], $emp_record[44], $emp_record[45], 
                                $emp_record[46], $emp_record[47], $emp_record[48], $emp_record[49], 
                                $emp_record[50], $emp_record[51], $emp_record[52], $emp_record[53],
                                $emp_record[54], $emp_record[55], $emp_record[56], $emp_record[57], 
                                $emp_record[58], $emp_record[59], $emp_record[60], $emp_record[61], 
                                $emp_record[62], $emp_record[63], $emp_record[64], $emp_record[65], 
                                $emp_record[66], $emp_record[67], $emp_record[68], $emp_record[1]";
                    $update_stmt->execute();
                    
                } else{
                    $insert_stmt->bind_param('sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss',
                                $emp_record[1],
                                $emp_record[2], $emp_record[3], $emp_record[4], $emp_record[5], 
                                $emp_record[6], $emp_record[7], $emp_record[8], $emp_record[9], 
                                $emp_record[10], $emp_record[11], $emp_record[12], $emp_record[13], 
                                $emp_record[14], $emp_record[15], $emp_record[16], $emp_record[17], 
                                $emp_record[18], $emp_record[19], $emp_record[20], $emp_record[21], 
                                $emp_record[22], $emp_record[23], $emp_record[24], $emp_record[25], 
                                $emp_record[26], $emp_record[27], $emp_record[28], $emp_record[29], 
                                $emp_record[30], $emp_record[31], $emp_record[32], $emp_record[33], 
                                $emp_record[34], $emp_record[35], $emp_record[36], $emp_record[37], 
                                $emp_record[38], $emp_record[39], $emp_record[40], $emp_record[41], 
                                $emp_record[42], $emp_record[43], $emp_record[44], $emp_record[45], 
                                $emp_record[46], $emp_record[47], $emp_record[48], $emp_record[49], 
                                $emp_record[50], $emp_record[51], $emp_record[52], $emp_record[53],
                                $emp_record[54], $emp_record[55], $emp_record[56], $emp_record[57], 
                                $emp_record[58], $emp_record[59], $emp_record[60], $emp_record[61], 
                                $emp_record[62], $emp_record[63], $emp_record[64], $emp_record[65], 
                                $emp_record[66], $emp_record[67], $emp_record[68]";                  
                 $insert_stmt->execute();
                }
                
            }            
            fclose($csv_file);
            $import_status = '?import_status=success';
        } else {
            $import_status = '?import_status=error';
        }
    } else {
        $import_status = '?import_status=invalid_file';
    }
}
header("Location: index.php".$import_status);
oprakyz7

oprakyz72#

当你尝试用PHP导入到MySQL时,CSV文件中的反斜线被忽略了。这可能是因为反斜线在PHP字符串中被用作转义字符,因此它们被解释为转义字符。

// get data records from csv file
   while(($emp_record = fgetcsv($csv_file)) !== FALSE){
      // Escape backslashes in the CSV data
      foreach ($emp_record as &$value) {
        $value = addslashes($value);
      }
   // Check if employee already exists with same email

相关问题