将JSON中的值插入数据库

时间:2012-09-11 19:21:58

标签: php mysql arrays json

我有一个页面上的JSON数组。它随着时间的推移被添加到一些用户交互中。当用户完成后,他们需要将这个数组提交到一个页面,通过php将他们的信息添加到mySQL表中。我通过AJAX调用页面如下answersArray是数组

$.ajax({
    type: "POST",
    dataType: "json",
    data: answersArray,
    url: 'sendToUsersFeedback.php',
});

数组如下所示:

[
    {
        "USERID": "3",
        "INDVID": "0",
        "RATING": "1",
        "CONFIDENCE": "8"
    },
    {
        "USERID": "3",
        "INDVID": "1",
        "RATING": "1",
        "CONFIDENCE": "88"
    }
]

这是我感到困惑的地方。我需要解码这个传入的json然后循环它为每个数组项添加一个新记录(USERID,INDVID,RATING和CONFIDENCE组成一个记录等)。我可以在这个数组中有多达20个。我知道USERID不是唯一的。已经有了这个设置。

这是php方面我搞砸了。如何解码传入的数组并完成它。我试过以下

$sql = json_decode(data,true);
foreach( $data as $row ) {
    $sql[] = '("'.mysql_real_escape_string($row['USERID']).'", '.$row['INDVID'].','.$row['RATING'].','.$row['CONFIDENCE'].')';
}
mysql_query('INSERT INTO users_feedback (USERID, INDVID, RATING. CONFIDENCE) VALUES '.implode(',', $sql));

我关门了吗?我很困惑。提前谢谢。

3 个答案:

答案 0 :(得分:1)

首先,为您发布的数据命名:

$.ajax({
    type: "POST",
    dataType: "json",
    data: {
      my_data: answersArray
    },
    url: 'sendToUsersFeedback.php',
});

然后,在您的PHP代码中,恢复您的数据:

$data = $_POST['my_data'];
$sql = json_decode($data, true);
...

您应该知道每个人都可以在客户端编辑JSON,因此以这种方式将数据插入数据库是非常危险的。

答案 1 :(得分:0)

你在做:

$sql = json_decode(data,true); 

什么是data?你可能错过了美元符号。你真的在$data获得了JSON吗?

您将json_decode()结果分配给$sql;现在,您的$sql变量将包含与您的$data相关联的数组。 $data仍然是一个字符串,因为自检索它以来您没有更改它的值。

然后你循环遍历字符串(没有发生)并运行:

mysql_query('INSERT INTO users_feedback (USERID, INDVID, RATING. CONFIDENCE) VALUES '.implode(',', $sql));
上面的

$sql将是您的JSON,作为PHP数组,类似于:

array(array('USERID' => 1 ...), array('USERID' => 2 ...)); 

你应该:

$data = json_decode($data, true);
$sql = array();
foreach ($data as ...

另外,请确保您实际检索$ data:

$data = $_POST['data']

答案 2 :(得分:0)

很简单,你可以使用来自json代码的$ data数组。

您必须将解码后的数组设置为另一个变量并使用它循环。

$j_decoded = json_decode(data,true);

foreach(j_decoded as $row ) {
$sql[] = '("'.mysql_real_escape_string($row['USERID']).'", '.$row['INDVID'].','.$row['RATING'].','.$row['CONFIDENCE'].')';
}
mysql_query('INSERT INTO users_feedback (USERID, INDVID, RATING. CONFIDENCE) VALUES '.implode(',', $sql));

希望这会对你有所帮助。