【问题标题】:Json after json_encode showing wrong value after insert in database [closed]json_encode后的Json在数据库中插入后显示错误的值[关闭]
【发布时间】: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


【解决方案1】:

您将 echo 放置在代码中某处不必要的变量上,这就是为什么它会打印 name 2 次。正确检查并删除它。

【讨论】:

    【解决方案2】:
    {"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);
    

    【讨论】:

    • 我添加了完整的代码。
    猜你喜欢
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 2012-11-24
    相关资源
    最近更新 更多