插入数据库后json_encode之后的Json显示错误值

时间:2018-07-17 06:59:47

标签: php json multidimensional-array

我正在尝试使用json_encode将多维数组保存在数据库中。如果我回显json字符串,则其显示正确的输出,但插入后数据库字符串中的更改。

这是我的代码:

$email=$_POST['email'];
$watchlist=$_POST['watchlist'];
$watchshow=$_POST['watchshow'];
$yearshow=$_POST['yearshow'];

$quer = "SELECT email FROM users WHERE email = '$email'";
$q = mysqli_query($conn, $quer);
$count=0;
while($row = mysqli_fetch_array($q)){
$email = $row['email'];
$count++;
}

if($count==1) //if user already exist change greeting text to "Welcome Back"
{
$quer = "SELECT watchlist FROM users WHERE email = '$email'";
$q = mysqli_query($conn, $quer);
while($row = mysqli_fetch_array($q)){
$watch = $row['watchlist'];
}
$data = json_decode($watch, TRUE);
array_push($data,$watchlist);
$add=array();
array_push($add,$watchshow);
array_push($add,$yearshow);

$data[] = $add;

$t = json_encode($data , JSON_FORCE_OBJECT);

$sql = "update users set watchlist='$t' WHERE email='$email'";

if ($conn->query($sql) === TRUE) {
echo'updated';          
} else {
echo'error';         
}             
}
else            { 
$new=array();
array_push($new,$watchlist);
$add=array();
array_push($add,$watchshow);
array_push($add,$yearshow);
$new[] = $add;
$name = json_encode($new);

$sql1 = "INSERT INTO users (email,watchlist)
VALUES ('$email','$name')";
if ($conn->query($sql1) === TRUE) {
echo 'success';
} else {
echo "Error: " . $sql1 . "<br>" . $conn->error;
}
}

如果我回显$ name输出为

{"0":{"0":"Stranger Things","1":2017}}

但是插入后,它会在数据库中显示

{"0":"Stranger Things","1":{"0":"Stranger Things","1":"2017"}}

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

{"0":"Stranger Things","1":{"0":"Stranger Things","1":"2017"}}

发生这种情况的原因很可能是由于在使用循环并在$new[] = $add;内传递一些值时$new[i]

在第一个循环中,其正确的{"0":"Stranger Things","1":2017} 现在在第二个循环中我将为1。

因此,在位置1 {"0":"Stranger Things","1":2017}处将再次插入,并将最终数组设为{"0":"Stranger Things","1":{"0":"Stranger Things","1":"2017"}}

  

按原样显示完整代码,以识别错误。

根据您提供的代码,输出必须正确。

$email= "abc@gmail.com";
$watchshow="Stranger Things";
$yearshow= 2017;
$new=array();
$add=array();
array_push($add,$watchshow);
array_push($add,$yearshow);

$new[] = $add;

$add=array();
array_push($add,$watchshow);
array_push($add,$yearshow);
$new[] = $add;

echo $name = json_encode($new, true);

答案 1 :(得分:1)

您在代码中的某处放置了对不必要变量的回显,这就是为什么它会两次打印名称的原因。正确检查并删除它。

相关问题