用PHP/MySQL上传CSV

用PHP/MySQL上传CSV,php,html,mysql,csv,Php,Html,Mysql,Csv,我已经试着把一个csv文件上传到我的数据库里一个星期了,我已经读了无数的教程,不知道我做错了什么,这是一个简单的代码,我太愚蠢了,无法正确理解。任何帮助都是金色的!:) if(isset($\u文件['file'])){ $csv_文件=$_文件['file']['name']; $sql=当我必须将CSV导入数据库表时,我总是编写自己的CSV解析器/导入器。它非常简单 这里有一个例子 test.csv Firstname,Lastname,Age "Latheesan","Kanes",26

我已经试着把一个csv文件上传到我的数据库里一个星期了,我已经读了无数的教程,不知道我做错了什么,这是一个简单的代码,我太愚蠢了,无法正确理解。任何帮助都是金色的!:)

if(isset($\u文件['file'])){
$csv_文件=$_文件['file']['name'];

$sql=当我必须将CSV导入数据库表时,我总是编写自己的CSV解析器/导入器。它非常简单

这里有一个例子

test.csv

Firstname,Lastname,Age
"Latheesan","Kanes",26
"Adam","Smith",30
test.php

<?php

// Mini Config
$csv_file       = 'test.csv';
$delimiter      = ',';
$enclosure      = '"';
$skip_first_row = true;
$import_chunk   = 250;

// Parse CSV & Build Import Query
$import_queries = array();
$first_row_skipped = false;
if (($handle = fopen($csv_file, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, $delimiter, )) !== FALSE) {
        if ($skip_first_row && !$first_row_skipped) {
            $first_row_skipped = true;
            continue;
        }
        list($firstname, $lastname, $age) = $data;
        $import_queries[] = "INSERT INTO myTable (firstname, lastname, age) VALUES ('$firstname', '$lastname', $age);";
    }
    fclose($handle);
}

// Proceed if any data got parsed
if (sizeof($import_queries))
{
    foreach(array_chunk($import_queries, $import_chunk) as $queries)
    {
        $dbh->query(implode(' ', $queries));
    }
}

?>
对于实际导入数据库,您有两个选项:

  • 构建一个导入sql查询集合并在批处理(数组块)中执行它-这意味着对数据库的查询更少。但是,正如您所看到的,我没有检查CSV中的值-也就是说,我信任我的数据源,没有转义任何内容-有点危险

  • 一旦使用转义值构建查询,您就可以执行该查询-一个小缺点是它将在csv中每行执行一个查询


  • 希望这有帮助。

    您是否尝试过通过SQL控制台而不是通过PHP运行相同的查询?然后您可以确定这是您的代码问题还是您的查询问题。您的csv结构是什么样子的?您的db表是什么样子的?@JamesBaker刚刚告诉我访问被拒绝。这是我对用户ca的blummin读写访问权限吗“使用我”问题?可能是,也可能是您正在使用的SQL用户的用户权限。
    <?php
    
    // Mini Config
    $csv_file       = 'test.csv';
    $delimiter      = ',';
    $enclosure      = '"';
    $skip_first_row = true;
    $import_chunk   = 250;
    
    // Parse CSV & Build Import Query
    $import_queries = array();
    $first_row_skipped = false;
    if (($handle = fopen($csv_file, "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, $delimiter, )) !== FALSE) {
            if ($skip_first_row && !$first_row_skipped) {
                $first_row_skipped = true;
                continue;
            }
            list($firstname, $lastname, $age) = $data;
            $import_queries[] = "INSERT INTO myTable (firstname, lastname, age) VALUES ('$firstname', '$lastname', $age);";
        }
        fclose($handle);
    }
    
    // Proceed if any data got parsed
    if (sizeof($import_queries))
    {
        foreach(array_chunk($import_queries, $import_chunk) as $queries)
        {
            $dbh->query(implode(' ', $queries));
        }
    }
    
    ?>
    
    Array
    (
        [0] => INSERT INTO myTable (firstname, lastname, age) VALUES ('Latheesan', 'Kanes', 26);
        [1] => INSERT INTO myTable (firstname, lastname, age) VALUES ('Adam', 'Smith', 30);
    )