使用 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使用POST传递json数据的接收与处理问题

使用 PHP PDO 解码后将整个 JSON 插入数据库

如何优化使用 PHP 或 Mysql 或 Laravel 将 12K 的 JSON 插入数据库

PHP从Android将JSON数据插入MySQL数据库

将 JSON 编码的 PHP 变量传递给 HighCharts

ECharts+PHP+MySQ+ Ajax 实现图表绘制