【问题标题】:How to update mysql with json array?如何使用 json 数组更新 mysql?
【发布时间】:2020-07-19 01:38:54
【问题描述】:

我想在我的服务器上进行 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代码一定是这样的: 更新名称 SET eur = $eur, e = $e, ... WHERE 名称 = $firstname。

Firstname 是everyobject 的名字。 eur 和 e 是唯一必须更改的值。

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

【问题讨论】:

    标签: php html mysql arrays json


    【解决方案1】:

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

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

    我编写了一些 PHP 来将 JSON 解码为带有 json_decode() 的关联数组,然后使用键和值插入到我创建的 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 对象。

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

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

    【讨论】:

    • 我无法想象你想要的改变。您可以编辑上面的问题并显示更新前后您想查看的数据示例吗?
    • 我想我明白了。您不想将 JSON 直接存储在数据库中,您想要 PHP 代码中的 JSON 文档,并且您在问如何将其映射到表中的普通列?您能否更清楚地描述您的数据库表?
    • 我编辑了我的答案,编写了一个解码 JSON 并将其插入 MySQL 表的 PHP 示例。
    • 对不起,我有工作和家要照顾。我在 Stack Overflow 上回答问题,但我不是在寻找其他项目。
    猜你喜欢
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2016-08-01
    • 2019-09-01
    相关资源
    最近更新 更多