【发布时间】:2018-07-17 06:59:46
【问题描述】:
我正在尝试使用 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;
}
}
如果我 echo $name 输出是
{"0":{"0":"Stranger Things","1":2017}}
但是插入后它会在数据库中显示这个
{"0":"Stranger Things","1":{"0":"Stranger Things","1":"2017"}}
我在这里做错了什么?
【问题讨论】:
-
您在什么时候回显字符串以进行检查?数据库列是 JSON 类型还是纯字符串?
-
列类型是 varchar 我的主机上没有 json 类型的选项
-
如果我回显 $name 它显示正确的输出
-
您在 DB 中看到了什么?有正确的数据吗?
-
在数据库中插入后显示 {"0":"Stranger Things","1":{"0":"Stranger Things","1":"2017"}}
标签: php json multidimensional-array