
本文介绍如何使用 php(兼容 codeigniter)将整个 csv 文件的内容读取为字符串,并安全地插入 mysql 数据表的 text 或 longtext 类型字段中,而非执行批量导入导出操作。
本文介绍如何使用 php(兼容 codeigniter)将整个 csv 文件的内容读取为字符串,并安全地插入 mysql 数据表的 text 或 longtext 类型字段中,而非执行批量导入导出操作。
在实际开发中,有时需要将用户上传或系统生成的 CSV 文件“原样保存”为一条记录的字段值(例如存档、审计、后续解析等场景),而非将其解析后逐行导入数据库。此时,目标是将 CSV 文件的完整原始内容(即纯文本字符串)存入 MySQL 表的某个列(如 file_content),而非通过 LOAD DATA INFILE 导入数据。
✅ 正确做法:读取文件 → 绑定参数 → 安全插入
推荐使用 PDO 预处理语句,避免 SQL 注入并支持大文本存储。确保目标字段类型为 TEXT(最大 64KB)、MEDIUMTEXT(16MB)或 LONGTEXT(4GB),以容纳可能较大的 CSV 内容。
使用 qbo-mileage CLI 及用户凭证,从 Airtable、Outlook 或 Google Calendar 记录生成 QuickBooks Online 里程 CSV 文件。
// 示例:使用 PDO 插入 CSV 文件全文
$csvPath = '/path/to/abc.csv'; // 替换为实际文件路径(如 $_FILES['file']['tmp_name'])
// 1. 读取 CSV 文件全部内容为字符串
$csvContent = file_get_contents($csvPath);
if ($csvContent === false) {
throw new Exception("无法读取 CSV 文件: {$csvPath}");
}
// 2. 使用预处理语句插入(推荐方式)
try {
$pdo = new PDO("mysql:host=localhost;dbname=your_db", $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("INSERT INTO documents (date, filename, file_content) VALUES (?, ?, ?)");
$stmt->execute([
'2022-08-16', // date
'abc.csv', // filename
$csvContent // file_content — 整个 CSV 原文
]);
echo "CSV 文件内容已成功保存至数据库。";
} catch (PDOException $e) {
error_log("数据库插入失败: " . $e->getMessage());
throw $e;
}
⚠️ 注意事项
-
字段类型必须匹配:MySQL 列需设为
TEXT及以上(如MEDIUMTEXT),否则超长内容会被截断; -
字符集统一:确保数据库、表、列均使用
utf8mb4字符集,避免 CSV 中的中文、特殊符号乱码; -
CodeIgniter 用户提示:可在模型中调用
$this->db->insert(),但需手动处理大文本(CI3 默认对text字段无特殊限制);更稳妥的做法是通过$this->db->query()+ 绑定参数,或直接使用原生 PDO(如上例); -
安全性:切勿拼接字符串构造 SQL(如
"INSERT ... VALUES ('$csvContent')"),极易引发注入与截断风险; -
大文件优化:若 CSV 超过数 MB,建议检查
php.ini中memory_limit和post_max_size,必要时改用流式读取(但file_get_contents对多数场景已足够)。
✅ 总结
该方案本质是「文件内容持久化」,核心逻辑仅三步:file_get_contents() → 参数绑定 → PDO::execute()。它完全区别于 LOAD DATA INFILE 或 fgetcsv() 解析导入,专注实现“把 CSV 当作文本对象存进字段”的业务需求。只要字段类型合理、编码一致、SQL 安全,即可稳定运行于 CodeIgniter 或任何 PHP 环境。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










