使用 PHP 将 JSON 数据导入数据库 (MySQL)

Import JSON data into database(MySQL) using PHP

我正在 PHP 中编写脚本,直接将数据从 JSON 文件直接导入 MySQL 数据库。我目前的样本数据非常小。我有几个问题。我想在没有外部包的情况下这样做。如果您知道或有代码示例,我可以看看,那将非常有帮助。

  1. 如何让它处理非常大的数据集?分解成 块?逐行导入?使用 fopen?
  2. 如果在 运行 期间脚本由于某种原因被中断,是 有没有办法确保它在它离开的地方继续?你会怎么做?
  3. 如果我想删除具有相同电子邮件的重复项,我应该这样做吗 在导入期间或可能在使用 SQL 查询之后?
  4. 这也适用于 XML 和 CSV 吗?

数据

[
  {
  "id":1,
  "name":"Mike",
  "email":"mike@businessweek.com"
  },
  {
  "id":2,
  "name":"Nick",
  "email":"nick@businessweek.com"
  }
]

$jsondata = file_get_contents('data.json');

$data = json_decode($jsondata, true);

foreach ($data as $row) {

    $query = 'INSERT INTO `member` (`name`, `email`) VALUES (?, ?)';

    $statement = $pdo->prepare($sql);

    $statment->execute([$row['name'], $row['email']]);

}

这可能会被关闭,但为您提供一些信息:

  1. 分解它的唯一方法是每行有单独的 JSON 个对象,或者单独的 JSON 个对象,或者抓取每 X 行(在您的示例中为 5 行)。然后你可以 fopen 并逐行阅读它。您可以从 {}(不推荐)。
  2. 我能想到的唯一方法是使用事务,and/or 跟踪总行数并在单独的数据库中减少每个插入 table。
  3. 如果您导入整个文件,那么您可以这样做,也许可以使用 array_columnemail 上重新编制索引,这将删除重复项。如果不是,那么它必须在 SQL.
  4. 之后
  5. 是的,你会这样做,只是解析数据不同。 CSV 将是 fgetcsv or str_getcsv and XML would be Simple XML 或类似的东西。数据在数组数组中后,将相同插入。