首页 > 解决方案 > 如何使用 json 数组更新 mysql?

问题描述

我想在我的服务器上进行 cron 作业以每 10 分钟保存一次我的 json 数组(我想每 10 分钟更新一次 mysql 表)

问题是我有真正的嵌套数组,如果没有你的帮助,我现在很难独自保存!

这是json数组:

{"firstname":{"eur":14.27,"e":0.00612979},"lastname":{"eur":0.18709,"e":2.655e-05},"middlename":{"eur":617.26,"e":1.0}}

我的表包含以下行:名称(这是示例的名称-> 名字)所以我想更新表名值与我的示例相同的行,即“名字”或“姓氏”或“中间名”。

我还有两行包含“eur”和“e”行。我必须将 json 数组中的值输入到与示例中相同的行。我知道它不好解释了我想要什么,所以我会尝试更好的。

在我的 SQL 中,我有几行:(名称已经写好并且必须保持不变)名称 - EUR - E

我想每 10 分钟更新一次 EUR 和 E 的值,其中 sql 中的 NAME 与数组数据中的相同。

这是我不工作的 PHP 代码:

$filename = "JSON-FILE-LINK";
$data = file_get_contents($filename);  
echo $data;

非常感谢社区!

编辑:我敢打赌 sql 代码一定是这样的: UPDATE names SET eur = $eur, e = $e, ... WHERE name = $firstname.

Firstname 是每个对象的名字。eur 和 e 是唯一必须更改的值。

如何将 json 数据填充到 sql 变量是我现在最大的问题。

标签: phphtmlmysqlarraysjson

解决方案


这是一个演示。我在 MySQL 的测试模式中创建了一个表:

mysql> use test;
mysql> create table mytable (name varchar(20), eur numeric(9,2), e numeric(9,2));

我编写了一些 PHP 来使用json_decode()将 JSON 解码为关联数组,然后使用键和值插入到我创建的 MySQL 表中。

<?php

$pdo = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', 'xxxx');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$data = '{"firstname":{"eur":14.27,"e":0.00612979},"lastname":{"eur":0.18709,"e":2.655e-05},"middlename":{"eur":617.26,"e":1.0}}';

$sql = "INSERT INTO mytable (name, eur, e) VALUES (?, ?, ?)";
$stmt = $pdo->prepare($sql);

foreach(json_decode($data, true) as $name => $values) {
    $stmt->execute([$name, $values['eur'], $values['e']]);
}

我在我的 bash 命令行上运行了 PHP。

php json-demo.php 

这是一个显示结果的 SQL 查询:

mysql> select * from mytable;
+------------+--------+------+
| name       | eur    | e    |
+------------+--------+------+
| firstname  |  14.27 | 0.01 |
| lastname   |   0.19 | 0.00 |
| middlename | 617.26 | 1.00 |
+------------+--------+------+

值得一提的是,您展示的 JSON 示例不是 JSON 数组,而是 JSON 对象。

花括号内的键/值对{ }使它成为一个对象。

数组是方括号内的逗号分隔列表[ ]


推荐阅读