我正在尝试使用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"}}
我在这里做错了什么?
答案 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)
您在代码中的某处放置了对不必要变量的回显,这就是为什么它会两次打印名称的原因。正确检查并删除它。