php - 从 fputcsv 加载数据本地文件:未记录数据
问题描述
我有以下 CSV 文件:(3 列)
998877665544331,,baba
998877665544332,,
998877665544333,,
998877665544334,,test
998877665544335,,
,R32AS00ZZYY,
998877665544337,,
998877665544338,,
998877665544339,,asfd
998877665544330,,
,R32AS00XXYY,
,R32AS00XXZZ,
我通过以下方式将其存储为文件:fputcsv($fp, array($data0, $data1, $data2));
然后我想用这个查询将它存储在数据库中:
$query = sprintf(
"LOAD DATA LOCAL INFILE '%s'
INTO TABLE devices
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\\n'
(col0, col1, col2);", addslashes(storage_path('app/file.csv')));
$asdf = DB::connection()->getpdo()->exec($query);
问题/问题:
为什么它只存储第一条记录和第六条记录?如下所示:
+--+----------------+-------------+--------+------+ |id| col0 | col1 | col xx | col2 | +--+----------------+-------------+--------+------+ |01|998877665544331 | "" | NULL | baba | |02| "" | R32AS00ZZYY | NULL | "" | +--+----------------+-------------+--------+------+
我试图实现的目标:相应地存储所有数据
编辑:我的表定义:
/*Table structure for table `tabel_name` */
DROP TABLE IF EXISTS `tabel_name`;
CREATE TABLE `tabel_name` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`col0` VARCHAR(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`col1` VARCHAR(12) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`colxx` VARCHAR(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`col2` VARCHAR(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` TIMESTAMP NULL DEFAULT NULL,
`updated_at` TIMESTAMP NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `tabel_col0_unique` (`col0`),
UNIQUE KEY `tabel_col1_unique` (`col1`)
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
解决方案
您已将 col1 定义为唯一的:
UNIQUE KEY `tabel_col1_unique` (`col1`)
并且您的数据具有非唯一值:
998877665544331,,baba
998877665544332,,
所以第一行被插入,但由于唯一约束,第二行失败。
推荐阅读
- c# - 在控制台中处理标准输出与重定向时不同
- asyncdisplaykit - ASViewController
显示空表 - google-cloud-platform - 保持 Datalab 运行
- .net - Microsoft.Azure.Management.DataLake.Store 与 Microsoft.Azure.DataLake.Store
- c++ - 'juce::WildcardFileFilter' 的初始化没有匹配的构造函数
- android - Cordova 8,Android 7.1.0,无法安装任何插件
- svn - 如何快速检查 svn 存储库连接以进行脚本编写
- python - 错误:无法从 DataFrame 中删除无限值
- c++ - 检查模板化方法的返回类型
- python - asfreq() 返回一个空的数据帧