¿Cómo puedo construir un json correcto a partir del resultado mysqli?

Estoy intentando construir un objeto json a partir de mi resultado mysqli. ¿Cómo lo hago? Por el momento, no crea un objeto que parece json.

Aquí está mi código:

$result = $dataConnection->prepare("SELECT id, artist, COUNT(artist) AS cnt FROM {$databasePrefix}users GROUP BY artist ORDER BY cnt DESC LIMIT 0 , 30"); $result->execute(); if($result->error) { die("That didn't work. I get this: " . $result->error); } $result->bind_result($id, $artist, $count); $data = array(); while($result->fetch()){ $data[] = '{ id :'.$id.', artist :'.$artist.', count :'.$count.'}'; } echo json_encode($data); $dataConnection->close(); 

Quiero un objeto de datos como:

 {"id":"27","artist":"myArtist","count":"29"},.... 

No construya su JSON para la matriz de valores a la que llamará json_encode en

en lugar de:

 $data[] = '{ id :'.$id.', artist :'.$artist.', count :'.$count.'}'; 

hacer

 $data[] = array("id"=>$id, "artist"=>$artist, "count"=>$count); 
 $result = $dataConnection->query("SELECT id, artist, COUNT(artist) AS count FROM {$databasePrefix}users GROUP BY artist ORDER BY cnt DESC LIMIT 0 , 30"); $data = array(); while($row = $result->fetch_assoc()){ $data[] = $row; } echo json_encode($data); 

Para decirte la verdad, mysqli es una horrible API para ser utilizada directamente en el código de la aplicación.

Hazte un favor y usa al menos DOP

 $result = $dataConnection->prepare("SELECT id, artist, COUNT(artist) AS count FROM {$databasePrefix}users GROUP BY artist ORDER BY cnt DESC LIMIT 0 , 30"); $result->execute(); echo json_encode($result->fetchAll()); 

a diferencia de mysqli, sus métodos siempre funcionan.

Si usa mysqli aquí hay un ejemplo. Lo uso en combinación con una llamada ajax javascript.
El resultado es el siguiente: [{"field1":"23","field2":"abc"},{"field1":"24","field2":"xyz"}]

 $mysqli = mysqli_connect('localhost','dbUser','dbPassword','dbName'); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $query = "SELECT field FROM table LIMIT 10"; if ($result = mysqli_query($mysqli, $query)) { $out = array(); while ($row = $result->fetch_assoc()) { $out[] = $row; } /* encode array as json and output it for the ajax script*/ echo json_encode($out); /* free result set */ mysqli_free_result($result); /* close connection*/ $mysqli->close(); } /* close connection*/ $mysqli->close(); 

solo crea una matriz de todas tus filas, luego hazlo:

 echo json_encode($array)