php - 如何使用 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 变量是我现在最大的问题。
解决方案
这是一个演示。我在 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 对象。
花括号内的键/值对{ }
使它成为一个对象。
数组是方括号内的逗号分隔列表[ ]
。
推荐阅读
- python - 在 Flask 环境中使用 mod_wsgi 无法显示网页
- javascript - 在 jquery 中对多个单击事件执行相同的功能
- python - 如何在python中抓取非类文本?
- d3.js - 力导向图的鱼眼效应:在图稳定之前不生效
- powershell - 使用 Powershell 删除 unicode 字符
- facebook - Cognito 和使用 facebook 登录不起作用
- reactjs - React Antd 标题 - 粗体
- ros - 我可以直接从 ekf_localization 节点与 navsat 转换节点融合的 /odomtery_filtered 主题的方向发送转向角吗
- python - 尝试在 Python Kivy 中重置时钟时间表
- python - 如何在 Python 中的新列表中拆分子列表