Php 来自数据库的JSON编码结果,然后解码给我错误致命错误:无法在中使用stdClass类型的对象作为数组

Php 来自数据库的JSON编码结果,然后解码给我错误致命错误:无法在中使用stdClass类型的对象作为数组,php,json,Php,Json,嗨,JSON有点新,所以请容忍我的愚蠢。。我正在开发一个聊天应用程序,并试图在我的php脚本上使用json。。到目前为止,我尝试的是在执行数据库查询后,将结果编码为JSON,然后使用JSON\u decode将其插入到foreach语句中 下面是包含json\u encode和json\u decode的php代码 <?php session_start(); $username=$_SESSION['username']; $user_id = $_SESSION['id'];

嗨,JSON有点新,所以请容忍我的愚蠢。。我正在开发一个聊天应用程序,并试图在我的php脚本上使用json。。到目前为止,我尝试的是在执行数据库查询后,将结果编码为JSON,然后使用
JSON\u decode
将其插入到foreach语句中 下面是包含
json\u encode
json\u decode
的php代码

    <?php
session_start();
$username=$_SESSION['username'];
$user_id = $_SESSION['id'];
  require "config.php";
  $con = new PDO("mysql:host=".db_host.";dbname=chat_db",db_username,db_password);
  $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $sql="SELECT id,firstname,lastname,status,flag,flag2 FROM users WHERE id != :uid";
  $stmt=$con->prepare($sql);
  $stmt->bindValue("uid", $user_id, PDO::PARAM_STR);
  $stmt->execute();

  $sql2="UPDATE users SET status= 1 WHERE status = 0 AND id = :uid";
  $stmt2=$con->prepare($sql2);
  $stmt2->bindValue("uid", $user_id, PDO::PARAM_STR);
  $stmt2->execute();
$rows =$stmt->fetchAll();
$str = json_encode($rows);
$str2 = json_decode($str);
  foreach($str2 as $row){
  $uid = $row['id'];

  $firstname = $row['firstname'];
  $lastname = $row['lastname'];
  $sts = $row['status'];
  $flg = $row['flag'];
  $flg2 = $row['flag2'];
?>
<li>
  <a href="#" data-usernem="<?php echo $username; ?>" data-suid="<?php echo $user_id; ?>" data-userid="<?php echo $uid; ?>" data-role="button"><?php echo $firstname . PHP_EOL . $lastname; ?> </a>

  <span class="typing-stats idle" data-type-status="<?php echo $flg2; ?>"> Typing... </span>
  <span class="mail msg" data-flag="<?php echo $flg; ?>"> <a href="#" data-role="button"><i class="fa fa-envelope-o"></i></a> </span>
  <span class="bullet" data-status="<?php echo $sts; ?>"> &nbsp; </span>
</li>
<?php
  }
?>


  • 使用参数
    true
    将其转换为数组

    $str2 = json_decode($str, true);
    

    你为什么要编码和解码?您可以直接在
    $rows
    上循环。因为我在firebug控制台的“网络”选项卡下检查了firebug控制台,它传输的大小已经为1.1kb,所以我正在尝试最小化它的大小。。这可以使用json_解码和json_编码来完成吗?因为有人说json更轻,这就是为什么我要将所有脚本转换为json格式。。我的理论错了吗?是的,你错了。如果只将数据发送到浏览器(例如使用ajax的行数据),然后用javascript构建html,那么JSON就是“轻量级”的。但是,发送到浏览器的输出是html,无论是否使用JSON,输出都完全相同。由于两个额外的函数调用,它现在只会稍微慢一点。启用压缩(如果尚未启用)将在这里做更多的工作。哦,对不起。。。那你能给我什么建议?因为我认为JSON可以帮助我解决问题。顺便说一句,你发送到浏览器的html的大小与你包含的图像相比可能微不足道(一般来说,我不知道你的网站…),所以请确保你优化了正确的东西,不要浪费时间在你很难赢得任何东西的地方。