使用php将数据从JSON插入到mysql中

时间:2014-02-14 13:37:22

标签: php mysql sql json

我有一个JSON,我想插入到mysql数据库中。我的JSON是

{"users": { "bert":6.44, "earnie":0.25, "bigbird":34.45 }}

我在mysql中有一个名为“USERSAMOUNTS”的表,有两个颜色。

列名为“USERNAME”和“AMOUNT”。

我正在尝试将每个名称插入USERNAME列,并使用foreach循环和内爆将每个数量插入到一个查询中的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确认数据库连接。未插入任何记录且未显示任何错误消息。这里的任何人都可以指出我哪里出错了,并且可能会给我一个关于如何修复代码的提示吗?

4 个答案:

答案 0 :(得分:1)

更改您的代码:

$array = json_decode($data, true);
$rows = array();                                   
foreach($array['users'] as $key => $value)                         
    $rows[] = "('" . $key . "', '" . $value . "')"; 

$values = implode(",", $rows);

答案 1 :(得分:1)

您的代码开头有问题:

$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) {
  ...

答案 2 :(得分:0)

插入

中不需要括号
$count = $dbh->exec("INSERT INTO USERAMOUNTS(USERNAME, AMOUNT) VALUES " . $values); 

答案 3 :(得分:0)

最初的问题是你的数组不是$ 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. "')";
}

更少的代码 - 相同的结果。