【问题标题】:Importing CSV to MySQL with PHP使用 PHP 将 CSV 导入 MySQL
【发布时间】:2026-01-20 02:25:02
【问题描述】:

我从互联网上收集了一些信息并编写了这个小脚本来将 CSV 文件导入 MySQL 数据库。我认为它是正确的,但它不起作用。

我做错了什么?

 <?php 

//connect to the database
$connect = mysql_connect("localhost","testdb","testdb");
mysql_select_db("testdb",$connect); //select the table    

if ($_FILES[csv][size] > 0) {

    //get the csv file
    $file = $_FILES[csv][tmp_name];
    $handle = fopen($file,"r");

    //loop through the csv file and insert into database
    do {
        if ($data[0]) {
            mysql_query("INSERT INTO class12 (htno, subcode, subname, int_marks, ext_marks, result, credits) VALUES
                (
                    '".addslashes($data[0])."',
                    '".addslashes($data[1])."',
                    '".addslashes($data[2])."'
                    '".addslashes($data[3])."'
                    '".addslashes($data[4])."'
                    '".addslashes($data[5])."'
                    '".addslashes($data[6])."'
                    '".addslashes($data[7])."'
                )
            ");
        }
    } while ($data = fgetcsv($handle,3000,",","'"));
    //

    //redirect
    header('Location: import.php?success=1'); die;

}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Import a CSV File</title>
</head>

<body>

<?php if (!empty($_GET[success])) { echo "<b>Your file has been imported.</b><br><br>"; } //generic success notice ?>

<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
  Choose your file: <br />
  <input name="csv" type="file" id="csv" />
  <input type="submit" name="Submit" value="Submit" />
</form>

</body>
</html>

如果可能,请提供代码以使用文件名(不带.csv 扩展名)自动创建 SQL 表,然后将其导入。

【问题讨论】:

标签: php mysql csv


【解决方案1】:

你错过了以下几行中的逗号

                '".addslashes($data[4])."'
                '".addslashes($data[5])."'
                '".addslashes($data[6])."'
                '".addslashes($data[7])."'`

我已经测试了code,它工作正常。如果有帮助,请投票

2.可能是你把表名放在这里了。你必须写数据库名。

mysql_select_db("testdb",$connect); //select the table

【讨论】:

  • 实际上它工作了:) 但仍然重新调整一个空页面.. 是否可以写一些 echo 成功消息替换 header('Location: import.php?success=1'); die;
  • 你可以这样做。你当前的文件名是import.php 吗?
  • 做一件事,先做这个johnboy.com/blog/tutorial-import-a-csv-file-using-php-and-mysql的demo,然后慢慢操作一切。删除标题位置,删除mysql_query并放置echo。现在加载页面结果打印sql查询。复制使用phpMyAdmin查询并运行。这样你就可以自己测试了。
  • 是否可以包含代码以自动创建带有文件名(不带 .csv 扩展名)的 SQL 表,然后将其导入。
  • 是的。修剪文件名php.net/manual/en/function.substr.php,然后在PHP代码中创建一个类似于johnboy.com/scripts/import-csv-file-with-php-mysql/contacts.sql的表。
【解决方案2】:

mysql_query("INSERT INTO class12 (htno, subcode, subname, int_marks, ext_marks, result, credits) VALUES ( '".addslashes($data[0])."', '".addslashes($data[1])."', '".addslashes($data[2])."' '".addslashes($data[3])."' '".addslashes($data[4])."' '".addslashes($data[5])."' '".addslashes($data[6])."' '".addslashes($data[7])."'//我认为这是额外的,你的表只有 7 列!

【讨论】:

  • 欢迎来到 SO,请记住正确概述您的源代码。