将JSON中的值插入数据库


Insert values from JSON into database

我在页面上有一个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));

我接近了吗?我很困惑。提前谢谢。

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

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

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

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

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

您正在执行:

$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']

Simple,您可以使用json代码中的$data数组获得foreach。

您必须将解码后的数组设置为另一个变量并与其循环

$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));

希望这对你有帮助。