2014-04-08 2 views
0

안녕하세요, JSON에서 새로 온 것 같습니다. 내 어리 석음을 참아주세요. 채팅 응용 프로그램을 개발 중이며 시도 중입니다. 내 작업 PHP 스크립트에서 json을 사용하려면 .. 내가 지금까지 시도한 것은 내가 내 데이터베이스 쿼리를 실행 한 후에 JSON으로 결과를 인코딩 한 다음에 json_decode을 사용하고 내 foreach 문에 삽입한다. 여기에 PHP가있다. 그것으로 모두 json_encodejson_decodeJSON 인코딩 결과가 데이터베이스에서 디코딩되면 오류가 발생합니다. 치명적인 오류 : 배열로 stdClass 유형의 객체를 배열로 사용할 수 없습니다.

<?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 
    } 
?> 

이 스크립트는 나에게 오류를 제공 실행하는 경우와 코드 Fatal error: Cannot use object of type stdClass as array in D:\site_deploy\chat\includes\loadusers.php on line 22

json_encodejson_decode을 올바르게 사용하고 있습니까? 나는 내가 그것을 위해서 var_dump 위해 노력했다

json_decode에서 PHP 매뉴얼에 기록 뭐죠 다음 확신 그것은 나에게로 변환 참고

+0

왜 인코딩 및 디코딩합니까? '$ rows'를 직접 반복 할 수 있습니다. – jeroen

+0

그물 탭 아래 콘솔을 확인했기 때문에 전송하는 크기가 1.1kb에 이미 있습니다. 크기를 최소화하려고합니다. json_decode와 json_encode를 사용하여이 작업을 수행 할 수 있습니까? 어떤 사람들은 json이 더 가볍기 때문에 모든 스크립트를 JSON 형식으로 변환하고 있다고 말하기 때문에 ... 내 이론에 잘못 맞습니까? –

+0

네, 틀렸어. JSON은 데이터를 브라우저 (예 : ajax를 사용하는 행 데이터 만)로 보내고 javascript로 html을 작성하면 "가벼운"것입니다. 그러나 브라우저로 보내는 출력은 html이며 JSON을 사용하든 사용하지 않든 정확히 동일합니다. 이제는 두 가지 추가 함수 호출로 인해 조금 느려질 것입니다. 압축을 활성화하면 (이미 활성화되어 있지 않은 경우) 여기서 더 많은 작업을 수행 할 수 있습니다. – jeroen

답변

1

를 사용하여 매개 변수 true를 인코딩 된 데이터의 집합을 제공합니다 정렬.

$str2 = json_decode($str, true); 
관련 문제