使用 php 将 JSON 中的数据插入 mysql
Posted
技术标签:
【中文标题】使用 php 将 JSON 中的数据插入 mysql【英文标题】:insert data from JSON into mysql using php 【发布时间】:2014-03-13 21:40:14 【问题描述】:我有一个 JSON 想要插入到 mysql 数据库中。我的 JSON 是
"users": "bert":6.44, "earnie":0.25, "bigbird":34.45
我在 mysql 中有一个名为“USERSAMOUNTS”的表,有两个列。
这些列称为“USERNAME”和“AMOUNT”。
我试图在一个查询中使用 foreach 循环和内爆将每个名称插入 USERNAME 列,并将每个金额插入 AMOUNT 列。我使用的代码如下......
$array = json_decode($data, true);
$keys = array_keys($array); // get the value of keys
$rows = array(); // create a temporary storage for rows
foreach($keys as $key)
// loop through
$value = $array[$key]; // get corresponding value
$rows[] = "('" . $key . "', '" . $value . "')"; // add a row to the temporary storage
$values = implode(",", $rows); // 'glue' your rows into a query
$hostname = 'localhost'; // write the rest of your query
$username = 'usersname';
$password = 'userspassword';
try
$dbh = new PDO("mysql:host=$hostname;dbname=my_database", $username, $password);
echo 'Connected to database<br />'; // echo a message saying we have connected
$count = $dbh->exec("INSERT INTO USERAMOUNTS(USERNAME, AMOUNT) VALUES ($values)");
echo $count;// echo the number of affected rows
$dbh = null;// close the database connection
catch(PDOException $e)
echo $e->getMessage();
....我的问题是当我运行代码时,我得到的只是消息
Connected to database
确认数据库连接。不插入记录,也不显示错误消息。谁能在这里指出我哪里出错了,也许给我一个关于如何修复代码的提示?
【问题讨论】:
【参考方案1】:更改您的代码:
$array = json_decode($data, true);
$rows = array();
foreach($array['users'] as $key => $value)
$rows[] = "('" . $key . "', '" . $value . "')";
$values = implode(",", $rows);
【讨论】:
【参考方案2】:你的代码开头有问题:
$array = json_decode($data, true);
$keys = array_keys($array); // get the value of keys
$rows = array(); // create a temporary storage for rows
foreach($keys as $key)
// loop through
$value = $array[$key]; // get corresponding value
$rows[] = "('" . $key . "', '" . $value . "')"; // add a row to the temporary storage
$array
是一个多维数组,其中只有一个元素的键为users
,因此您不是在循环数据,而是循环外部数组。如果启用错误显示,您将在以下行看到警告:php Notice: Array to string conversion
:
$rows[] = "('" . $key . "', '" . $value . "')";
您需要遍历 users
子数组的内容:
foreach ($array['users'] as $key => $value)
...
【讨论】:
【参考方案3】:插入时不需要括号
$count = $dbh->exec("INSERT INTO USERAMOUNTS(USERNAME, AMOUNT) VALUES " . $values);
【讨论】:
感谢您的指点 - 当我用您的代码替换时,我只插入了一条记录 USERNAME 有用户发布到它并且 AMOUNT 是默认值 0。 [AMOUNT] 的字段类型是什么? 字段类型是十进制(16,8)也很抱歉,我不认为我很清楚 - 我没有用户名“用户” - 这是在 json 对象的开头 -但我不需要存储它。【参考方案4】:最初的问题是你的数组不是$array,而是$array["users"]。
执行以下操作。 全部替换
$keys = array_keys($array); // get the value of keys
$rows = array(); // create a temporary storage for rows
foreach($keys as $key)
// loop through
$value = $array[$key]; // get corresponding value
$rows[] = "('" . $key . "', '" . $value . "')"; // add a row to the temporary storage
$values = implode(",", $rows); // 'glue' your rows into a query
以下内容:
$values = Array();
foreach($array["users"] as $user=>$amount)
$values[] = "('" . $user. "', '" . $amount. "')";
更少的代码 - 相同的结果。
【讨论】:
以上是关于使用 php 将 JSON 中的数据插入 mysql的主要内容,如果未能解决你的问题,请参考以下文章
如何优化使用 PHP 或 Mysql 或 Laravel 将 12K 的 JSON 插入数据库