PHP - 带有自动增加 ID 的 CSV 导入

标签 php csv mysqli

很抱歉,如果之前有人问过这个问题,但我在 SE 上找不到与我的案例相关的任何内容。

我正在尝试将 CSV 文件导入到我的 Mysql 数据库表中,其中 CSV 的表具有完全相同的数量和列顺序,但表的列 ID 在CSV 文件。

我想要实现的是将 CSV 导入表中,同时生成一个随每条记录自动增加的 ID 编号。这似乎不可能,因为 CSV 似乎总是想将其数据插入表中的第一列,但在我的情况下,我需要它作为第二列。

我该如何解决这个问题?有什么引用代码可以学习吗?我目前正在研究这种 PDO 方法,但遇到了上述困难。

PHP

<?php
$databasehost = "localhost"; 
$databasename = "test"; 
$databasetable = "sample"; 
$databaseusername="test"; 
$databasepassword = ""; 
$fieldseparator = ","; 
$lineseparator = "\n";
$csvfile = "filename.csv";

if(!file_exists($csvfile)) {
    die("File not found. Make sure you specified the correct path.");
}

try {
    $pdo = new PDO("mysql:host=$databasehost;dbname=$databasename", 
        $databaseusername, $databasepassword,
        array(
            PDO::MYSQL_ATTR_LOCAL_INFILE => true,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        )
    );
} catch (PDOException $e) {
    die("database connection failed: ".$e->getMessage());
}

$affectedRows = $pdo->exec("
    LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
      FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
      LINES TERMINATED BY ".$pdo->quote($lineseparator));

echo "Loaded a total of $affectedRows records from this csv file.\n";

?>

谢谢

最佳答案

您可以在导入期间为某些列设置 MySQL 值。如果您的 id 字段设置为自动递增,则可以在导入期间将其设置为 null,然后 MySQL 会为其分配递增值。

LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
   FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
   LINES TERMINATED BY ".$pdo->quote($lineseparator))."
   SET id=null;

编辑 - 如果 CSV 中不存在 ID 列

col1、col2、col3...是数据库表中实际列的名称(不含 id 列)

LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
   FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
   LINES TERMINATED BY ".$pdo->quote($lineseparator))."
   (col1, col2, col3,...)
   SET id=null;

关于PHP - 带有自动增加 ID 的 CSV 导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42134280/

相关文章:

javascript - jquery datepicker 获取日期(第 2 部分)

php - 更改 PHP 类函数的隐私范围

php - 如何防止PHP中的SQL注入(inject)?

python - 如何从 Pandas 数据框列的填充程度中获取百分比?

php - 将mysql数据导出到csv文件

php - 试图让 MySQL 结果水平显示

php - Mysqli 多表操作

php - Mongodb安装

php - 如何使用 PHP 仅获取 CSV 文件的第二列?

php - 无法返回之前的 PHP 页面