0

I can't seem to figure out what the problem is, but my PHP array isn't outputting as proper JSON. I removed the json_encode function, only to find out that my array's are cascading and not properly formatting themselves. Here is an example of the output (with json_encode removed):

Array (
    [0] => Array (
        [username] => g4m3b0y
        [profile_photo] => default.png
        [email] => [email protected]
        [first_name] => Michael
        [last_name] => Simpson
    )
) 
Array (
    [0] => Array (
        [username] => g4m3b0y
        [profile_photo] => default.png
        [email] => [email protected]
        [first_name] => Michael
        [last_name] => Simpson
    )
    [1] => Array (
        [username] => michelle
        [profile_photo] => default.png
        [email] => [email protected]
        [first_name] => Michelle
        [last_name] => Houston
    )
)

As you can see, it's creating duplicate results in separate arrays, hence my issue with the JSON output. Here is my code which is generating the results:

    $sql2 = "SELECT DISTINCT username, profile_photo, first_name, last_name, email FROM users WHERE (
        first_name LIKE '%$q%'
        OR last_name LIKE '%$q%'
    ) ORDER BY last_name";

    $sq2 = mysql_query($sql2);
    $st2 = mysql_num_rows($sq2);

    if($st2>=1) {   
        while($a = mysql_fetch_array($sq2)) {
            $userRow[] = array(
                'username' => $a['username'],
                'profile_photo'   => $a['profile_photo'],
                'email'   => $a['email'],
                'first_name'   => $a['first_name'],
                'last_name'   => $a['last_name']
            );
        header('Content-Type: application/json');
        echo json_encode($userRow);
        }
    }

    else {
        exit;
    }
5
  • What does $userRow[] look like inside the loop - echo this out to prove you are getting the correct data first Commented Apr 2, 2013 at 23:22
  • 1
    Stop using mysql functions, too. Use mysqli or PDO. Commented Apr 2, 2013 at 23:25
  • Whats the advantages of using mysqli vs mysql? Sorry if the question is obvious, but looking for some advice here. Thanks! Commented Apr 2, 2013 at 23:29
  • The mysql_* functions were deprecated as of 5.5. See here Commented Apr 2, 2013 at 23:32
  • Thank you, that seems like a pretty important piece of information. :) Commented Apr 2, 2013 at 23:43

1 Answer 1

1

Your call to header and json_encode is inside your while loop. Move it outside and it'll compile the lot into one json string. At present it is outputting multiple separate ones.

This also explains why you're getting the duplicate too. Iteration one adds the first row to the array $userRow, it then outputs the result which has got the key 0. Then the second iteration adds the next row to the existing array, and therefore gets the key 1. Then it echos the json encoded string again, therefore printing 0 and 1 this time. Hence 0 then 0, then 1

$sql2 = "SELECT DISTINCT username, profile_photo, first_name, last_name, email FROM users WHERE (
    first_name LIKE '%$q%'
    OR last_name LIKE '%$q%'
) ORDER BY last_name";

$sq2 = mysql_query($sql2);
$st2 = mysql_num_rows($sq2);

if($st2>=1) {   
    while($a = mysql_fetch_array($sq2)) {
        $userRow[] = array(
            'username' => $a['username'],
            'profile_photo'   => $a['profile_photo'],
            'email'   => $a['email'],
            'first_name'   => $a['first_name'],
            'last_name'   => $a['last_name']
        );
    }

    // I moved this below the above }
    header('Content-Type: application/json');
    echo json_encode($userRow);
}

else {
    exit;
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.