【问题标题】:Import JSON data into database(MySQL) using PHP使用 PHP 将 JSON 数据导入数据库(MySQL)
【发布时间】:2021-06-15 19:53:40
【问题描述】:

我正在用 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']]);

}

【问题讨论】:

  • 你放弃了吗?

标签: php mysql json import


【解决方案1】:

这可能会被关闭,但给你一些信息:

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

【讨论】:

  • 感谢您的回答! “不推荐”是什么意思?分解它还是“从{到}”?对于非常大的数据集,您会推荐什么?
  • 结构不是{ to }。对于大型数据集,如果每行有一个 JSON,则打开并读取并插入每一行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
  • 2013-05-17
  • 2020-09-12
  • 2015-12-10
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多