PHP实现CSV文件导入MySQL数据库的完整教程

2025-08-05 0 467

创建数据库表

首先我们需要创建存储用户数据的数据库表:

CREATE TABLE users (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    age INT(3),
    registration_date DATE
);

文件上传表单

创建一个简单的HTML表单用于上传CSV文件:

PHP处理逻辑

下面是完整的CSV导入处理代码:

<?php
// 数据库配置
$host = 'localhost';
$dbname = 'testdb';
$username = 'root';
$password = '';

// 连接数据库
try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("数据库连接失败: " . $e->getMessage());
}

if(isset($_POST['submit'])) {
    // 文件上传检查
    if(isset($_FILES['csvFile']) && $_FILES['csvFile']['error'] == UPLOAD_ERR_OK) {
        $fileType = pathinfo($_FILES['csvFile']['name'], PATHINFO_EXTENSION);
        
        // 验证文件类型
        if(strtolower($fileType) != 'csv') {
            $error = "请上传CSV格式的文件";
        } else {
            // 打开上传的文件
            $file = fopen($_FILES['csvFile']['tmp_name'], 'r');
            
            // 跳过标题行
            fgetcsv($file);
            
            // 准备SQL语句
            $stmt = $pdo->prepare("INSERT INTO users (name, email, age, registration_date) VALUES (?, ?, ?, ?)");
            
            $successCount = 0;
            $errorCount = 0;
            $errors = [];
            
            // 逐行处理数据
            while(($row = fgetcsv($file)) !== false) {
                // 验证数据完整性
                if(count($row) execute([$name, $email, $age, $date]);
                    $successCount++;
                } catch(PDOException $e) {
                    $errors[] = "数据库错误: " . $e->getMessage() . " - 数据: " . implode(',', $row);
                    $errorCount++;
                }
            }
            
            fclose($file);
            
            // 显示导入结果
            echo "<div class='result'>";
            echo "<h3>导入完成!</h3>";
            echo "<p>成功导入: <strong>$successCount</strong> 条记录</p>";
            echo "<p>失败: <strong>$errorCount</strong> 条记录</p>";
            
            if(!empty($errors)) {
                echo "<h4>错误详情:</h4>";
                echo "<ul>";
                foreach($errors as $error) {
                    echo "<li>$error</li>";
                }
                echo "</ul>";
            }
            echo "</div>";
        }
    } else {
        $error = "请选择要上传的文件";
    }
    
    if(isset($error)) {
        echo "<div class='error'>$error</div>";
    }
}
?>

CSV文件示例

以下是一个符合要求的CSV文件格式:

姓名 邮箱 年龄 注册日期
张三 zhangsan@example.com 28 2023-01-15
李四 lisi@example.com 32 2023-02-20
王五 wangwu@example.com 25 2023-03-10

最佳实践与安全建议

  • 始终验证文件类型和内容
  • 使用预处理语句防止SQL注入
  • 限制上传文件大小(php.ini中设置)
  • 对数据进行严格的验证和过滤
  • 处理可能的重复数据
  • 使用事务确保数据一致性

PHP实现CSV文件导入MySQL数据库的完整教程
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

淘吗网 php PHP实现CSV文件导入MySQL数据库的完整教程 https://www.taomawang.com/server/php/749.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务