【发布时间】:2022-11-11 15:50:12
【问题描述】:
我在尝试连接到 MySQL 数据库以从 .json 文件中插入某些 JSON 值时遇到问题。
我对处理数据、通过 PHP 等连接到数据库还是很陌生。
db 与找到此文件的位置位于同一 cpanel/host/server 中。如果我需要更改、添加或改进任何内容,请告诉我。
我正在尝试做的是读取 file.json,然后将这些条目插入到我服务器上的远程数据库中。
我正在寻找的是如何将这些值插入到将数据插入到 MYSQL 中,而不是在页面上打印。
这个问题没有回答我的问题:How to extract and access data from JSON with PHP?
<!DOCTYPE html>
<html>
<body>
<h1>Insert Data into DB</h1>
<?php
$username = "user";
$password = "pass";
// Create connection
$con = new PDO('mysql:host=host;dbname=DBNAME', $username, $password);
//read the json file contents
$jsondata = file_get_contents('http://path.to.file.com/file.json');
//convert json object to php associative array
$data = json_decode($jsondata, true);
foreach ($data as $jsons)
{
$id = null;
$fname = null;
$lname = null;
$email = null;
$phone = null;
$date = null;
$state = null;
foreach($jsons as $key => $value)
{
if($key == 'id') {
$id = $value;
}
if($key == 'date_created') {
$date = $value;
}
if($key == '1') {
$email = $value;
}
if($key == '3.3') {
$fname = $value;
}
if($key == '3.6') {
$lname = $value;
}
if($key == '5') {
$phone = $value;
}
if($key == '6') {
$state = $value;
}
}
//insert into mysql table
$sql = "INSERT INTO contact(id, date, first, last, phone, email, state)
VALUES('$id', '$date', '$fname', '$lname', '$phone', '$email', '$state')";
if(!mysql_query($sql,$con))
{
die('Error : ' . mysql_error());
}
}
?>
</body>
</html>
这是 JSON 条目的示例
{
"total_count": 209,
"entries": [
{
"id": "544537",
"form_id": "2",
"post_id": null,
"date_created": "2022-10-21 17:26:18",
"date_updated": "2022-10-21 17:26:18",
"is_starred": "0",
"is_read": "0",
"ip": "68.126.222.136",
"source_url": "/contact\",
"user_agent": "Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/106.0.0.0 Safari\/537.36",
"currency": "USD",
"payment_status": null,
"payment_date": null,
"payment_amount": null,
"payment_method": null,
"transaction_id": null,
"is_fulfilled": null,
"created_by": null,
"transaction_type": null,
"status": "active",
"1": "email@email.com",
"2": "Contractor\/GC",
"3.3": "first",
"3.6": "last",
"4": "Company",
"5": "(111)132-4567",
"6": "California",
"7": "I am seeking for a bid to furnish and install",
"is_approved": "3",
"3.2": "",
"3.4": "",
"3.8": "",
"8": "",
"workflow_current_status_timestamp": false,
"gpnf_entry_parent": false,
"gpnf_entry_parent_form": false,
"gpnf_entry_nested_form_field": false
},
【问题讨论】:
-
你为什么这样做 $data = json_decode($jsondata, true);两次?
-
警告:您对SQL Injections 持开放态度,应该使用参数化准备好的陈述而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough!
-
警告:
mysql_*扩展自 PHP 5.5.0 (2013) 起已弃用,自 PHP 7.0.0 (2015) 起已被删除。相反,应该使用mysqli 或PDO_MySQL 扩展名。在选择 MySQL API 时,另请参阅MySQL API Overview 以获得更多帮助。 -
Dharman 是对的,使用准备好的语句并且 mysql_* 已过时。
-
@ValeriuCiuca 一定是个意外。我删除了它,仍然没有