如何从JSON中提取数据并使用PHP将其插入MySQL?
我需要从JSON fila中提取数据,并使用PHP将其插入MySQL。这是代码如何从JSON中提取数据并使用PHP将其插入MySQL?,php,mysql,Php,Mysql,我需要从JSON fila中提取数据,并使用PHP将其插入MySQL。这是代码 <?php $connect = mysqli_connect("localhost", "root", "pass", "dbname"); //Connect PHP to MySQL Database $query = ''; $table_data = ''; $filename = "organizations.json"; $data = file_get_contents($f
<?php
$connect = mysqli_connect("localhost", "root", "pass", "dbname"); //Connect PHP to MySQL Database
$query = '';
$table_data = '';
$filename = "organizations.json";
$data = file_get_contents($filename); //Read the JSON file in PHP
$array = json_decode($data, true); //Convert JSON String into PHP Array
foreach($array as $row) //Extract the Array Values by using Foreach Loop - "Inserto todos los campos en la tabla pero no muestro el 'id' en la web"
{
$query .= "INSERT INTO organizations(id, displayName, created) VALUES ('".$row["id"]."', '".$row["displayName"]."', '".$row["created"]."'); "; // Make Multiple Insert Query
$table_data .= '
<tr>
<td>'.$row["displayName"].'</td>
<td>'.$row["created"].'</td>
</tr>
'; //Data for display on Web page
}
但它不适用于以下json文件:
[
{
"id": "Y2lzY29z",
"name": "Enterprise Edition",
"totalUnits": 1000,
"consumedUnits": 1
},
{
"id": "MGUzZjBj",
"name": "Messaging",
"totalUnits": 1000,
"consumedUnits": 0
}
]
{
"items": [
{
"id": "Y2lzY29z",
"name": "Enterprise Edition",
"totalUnits": 1000,
"consumedUnits": 1
},
{
"id": "MGUzZjBj",
"name": "Messaging",
"totalUnits": 1000,
"consumedUnits": 0
}
]
}
我不知道如何正确地编写查询
$query .= "INSERT INTO organizations
(id, displayName, created)
VALUES ('".$row["id"]."', '".$row["displayName"]."',
'".$row["created"]."');
谢谢 使用相同的代码,只需在foreach循环中进行调整。仅使用
$array['items']
实例$array
<?php
$connect = mysqli_connect("localhost", "root", "pass", "dbname"); //Connect PHP to MySQL Database
$query = '';
$table_data = '';
$filename = "organizations.json";
$data = file_get_contents($filename); //Read the JSON file in PHP
$array = json_decode($data, true); //Convert JSON String into PHP Array
foreach($array['items'] as $row) //Extract the Array Values by using Foreach Loop - "Inserto todos los campos en la tabla pero no muestro el 'id' en la web"
{
$query .= "INSERT INTO organizations(id, displayName, created) VALUES ('".$row["id"]."', '".$row["displayName"]."', '".$row["created"]."'); "; // Make Multiple Insert Query
$table_data .= '
<tr>
<td>'.$row["displayName"].'</td>
<td>'.$row["created"].'</td>
</tr>
'; //Data for display on Web page
}
“它不适用于以下json文件”
…这是因为JSON中的结构不同。这应该是相当明显的——您不能期望它只自动处理您提供的任意数据结构
代码需要修改才能读取新结构。在这种特定情况下,它非常简单-您有一个内部对象保存数组,因此您必须通过该对象而不是顶级对象进行循环:
改变
foreach($array as $row)
到
第二个Json对象有一个字段“items”。因此,您只需要对代码进行一些小的调整:
<?php
...
$array = json_decode($data, true);
$items = $array["items"];
foreach($items as $row){
...
}
首先,您应该参数化查询,然后绑定值,这样可以防止
这还允许您一次准备查询,但多次使用不同的参数执行查询,从而节省到数据库的往返和查询的多次编译
当然,数组从$array['items']
<?php
//Connect PHP to MySQL Database
$connect = mysqli_connect("localhost", "root", "pass", "dbname");
$filename = "organizations.json";
$data = file_get_contents($filename); //Read the JSON file in PHP
$array = json_decode($data, true); //Convert JSON String into PHP Array
//prepare the query once
$query = "INSERT INTO organizations
(id, displayName, created)
VALUES (?,?,?)";
$stmt = $connect->prepare($query);
foreach($array['items'] as $row) {
$stmt->bind_param('iss', $row['id'], $row['displayName'], $row['created']);
$stmt->execute();
$table_data .= "<tr>
<td>$row[displayName]</td>
<td>$row[created]</td>
</tr>";
}
您是否尝试过将您的foreach更改-foreach($array[“items”]更改为$row)
对不起,我在Json文件上粘贴了错误的变量。正确的变量为id、displayName、created。。但这不是问题所在problem@MarianoMunarriz如果你粘贴了错误的东西,你可以很容易地改变你的问题。在蓝色的“php”和“mysql”标签下面找到“edit”链接。但你是对的,这不是主要问题。请看下面的各种答案。我能够解决它,非常感谢你的帮助。我能够解决它,非常感谢你的帮助help@yourCommonSense这更符合你的要求吗
<?php
//Connect PHP to MySQL Database
$connect = mysqli_connect("localhost", "root", "pass", "dbname");
$filename = "organizations.json";
$data = file_get_contents($filename); //Read the JSON file in PHP
$array = json_decode($data, true); //Convert JSON String into PHP Array
//prepare the query once
$query = "INSERT INTO organizations
(id, displayName, created)
VALUES (?,?,?)";
$stmt = $connect->prepare($query);
foreach($array['items'] as $row) {
$stmt->bind_param('iss', $row['id'], $row['displayName'], $row['created']);
$stmt->execute();
$table_data .= "<tr>
<td>$row[displayName]</td>
<td>$row[created]</td>
</tr>";
}