php - 如何将 csv 文件中的空值导入到我的 mysql 表中?
问题描述
我想知道如何将具有空值的 CSV 文件导入到我的 MySQL 表中。
这是我在 PHP 中用于将 CSV 文件导入 MySQL 表的代码。
<?php
class csv extends mysqli {
private $state_csv = false;
public function __construct() {
parent::__construct("localhost","","","");
if ($this->connect_error) {
echo "File to connect Database: ". $this ->connect_error;
}
}
public function import($file=''){
$file = fopen($file, 'r');
while ($row = fgetcsv($file)) {
$value = "'". implode("','", $row) ."'";
$q = "INSERT INTO test(cognome,nome,etichetta,email) VALUES(". $value .")";
if ($this->query($q)) {
$this->state_csv = true;
} else {
$this->state_csv = false;
}
}
}
}
我的 CSV 文件具有以下结构:
Test, Test,,test@test.com
如果我导入包含所有数据的 CSV 文件,我可以导入它,但问题是存在空值时。
解决方案
我猜你的示例 CSV 行
Test, Test,,test@test.com
旨在成为您数据库列的这四个值
Test
Test
(null)
test@test.com
但是第三列在您的$row
数组中显示为零长度字符串,因此它作为零长度字符串插入到表中。您的 INSERT 语句将如下所示:
INSERT INTO test(cognome,nome,etichetta,email) VALUES('Test',' Test','','test@test.com')
看到空字符串etichetta
吗?
您需要替换此行:
$value = "'". implode("','", $row) ."'";
使用一些更智能的代码来循环$row
以更复杂的方式解释它们的元素。也许这样的事情会奏效。(未调试!)
$cols = [];
foreach ($row as $col) {
if (strlen($row) == 0) array_push ($cols, "NULL")
else array_push ($cols, "'" . mysqli_real_escape_string($row) . "'")
}
$value = implode (',', $cols);
结果将是
INSERT INTO test(cognome,nome,etichetta,email) VALUES('Test',' Test',NULL,'test@test.com')
O'Sullivan
而且,使用 real_escape_string 将Johnny ';DROP TABLE test;
正确处理名称。
推荐阅读
- javascript - 在 JS 中格式化地址以在数字前添加“,”
- angular - 角度 2/4 搜索建议未显示在文本框中
- php - Get the variable after assign
- javascript - Reselect createSelector issue
- php - 如何在 PHP 中逐像素重绘图像?
- javascript - 使用 OverlayView 导致 React Google Maps 标记位置错位
- c# - Specflow 使用步骤定义和页面对象之间的接口
- javascript - PHP 框架 | 每 X 次刷新一次并翻阅页面数组
- python-3.x - Django 中的 Celery 配置,将任务连接到视图
- python - 将数据框转换为系列,反之亦然/从系列或数据框中删除列