¿Cómo uso la json_encode()función con los resultados de la consulta MySQL? ¿Necesito iterar a través de las filas o puedo simplemente aplicarlo a todo el objeto de resultados?
Sé que esta es una pregunta muy antigua. Pero nadie muestra la alternativa más simple para solucionar el problema de los enteros que aparecen como cadenas. @mouckatron ofrece el indicador JSON_NUMERIC_CHECK de json_encode()en la respuesta a continuación. ¡Simple y funciona como un encanto! stackoverflow.com/questions/1390983/…
Le aconsejaría que mencione que durante la consulta de selección ASpara cambiar el nombre de las columnas a algo público, por ejemplo SELECT blog_title as title, esto es más limpio y el público no sabe cuáles son las columnas exactas de la base de datos.
RobertPitt
14
Este código codifica erróneamente todos los valores numéricos como cadenas. Por ejemplo, un campo numérico mySQL llamado puntaje tendría un valor JSON de "12" en lugar de 12 (observe las comillas).
Theo
24
@RobertPitt, ¡la seguridad basada en ocultar nombres de sus columnas es seguridad por oscuridad !
TMS
44
@Tomas es cierto, pero conocer los nombres exactos de las columnas hace que los ataques de inyección SQL sean mucho más fáciles
Tim Seguine
16
@Tim: Si está llegando al punto en que los nombres de sus columnas conocidos son la única barrera para la inyección SQL que ya perdió, ¿no?
este nos dará una matriz que contiene; 1) un corchete vacío 2) seguido del corchete que contiene nuestras filas de resultados devueltos ¿cuál es esta diferencia del otro?
Lo anterior no funcionará, en mi experiencia, antes de que nombre el elemento raíz en la matriz como algo, no he podido acceder a nada en el json final antes de eso.
Lo sentimos, esto es extremadamente largo después de la pregunta, pero:
$sql ='SELECT CONCAT("[", GROUP_CONCAT(CONCAT("{username:'",username,"'"), CONCAT(",email:'",email),"'}")), "]")
AS json
FROM users;'
$msl = mysql_query($sql)print($msl["json"]);
Solo básicamente:
"SELECT"Select the rows
"CONCAT"Returns the string that results from concatenating (joining) all the arguments
"GROUP_CONCAT"Returns a stringwith concatenated non-NULL valuefrom a group
2.) si $ result es más de una fila. Debe iterar las filas y guardarlo en una matriz y devolver un json con la matriz en él.
$rows = array();if(mysql_num_rows($result)>0){while($r = mysql_fetch_assoc($result)){
$id = $r["USERID"];//a column name (ex.ID) used to get a value of the single row at at time
$rows[$id]= $r;//save the fetched row and add it to the array.}}
echo json_encode($rows);
Tengo el mismo requisito Solo quiero imprimir un objeto de resultado en formato JSON, así que uso el código a continuación. Espero que encuentres algo en él.
// Code of Conversion
$query ="SELECT * FROM products;";
$result = mysqli_query($conn , $query);if($result){
echo "</br>"."Results Found";// Conversion of result object into JSON format
$rows = array();while($temp = mysqli_fetch_assoc($result)){
$rows[]= $temp;}
echo "</br>". json_encode($rows);}else{
echo "No Results Found";}
$array = array();
$subArray=array();
$sql_results = mysql_query('SELECT * FROM `location`');while($row = mysql_fetch_array($sql_results)){
$subArray[location_id]=$row['location'];//location_id is key and $row['location'] is value which come fron database.
$subArray[x]=$row['x'];
$subArray[y]=$row['y'];
$array[]= $subArray ;}
echo'{"ProductsData":'.json_encode($array).'}';
$rows = array();while($r = mysqli_fetch_array($result,MYSQL_ASSOC)){
$row_array['result']= $r;
array_push($rows,$row_array);// here we push every iteration to an array otherwise you will get only last iteration value}
echo json_encode($rows);
json_encode()
en la respuesta a continuación. ¡Simple y funciona como un encanto! stackoverflow.com/questions/1390983/…Respuestas:
La función
json_encode
necesita PHP> = 5.2 y el paquete php-json , como se menciona aquíNOTA :
mysql
está en desuso a partir de PHP 5.5.0, use lamysqli
extensión en su lugar http://php.net/manual/en/migration55.deprecated.php .fuente
AS
para cambiar el nombre de las columnas a algo público, por ejemploSELECT blog_title as title
, esto es más limpio y el público no sabe cuáles son las columnas exactas de la base de datos.Prueba esto, esto creará tu objeto correctamente
fuente
http://www.php.net/mysql_query dice "
mysql_query()
devuelve un recurso".http://www.php.net/json_encode dice que puede codificar cualquier valor "excepto un recurso".
Debe iterar y recopilar los resultados de la base de datos en una matriz, luego
json_encode
la matriz.fuente
Gracias, esto me ayudó mucho. Mi código:
fuente
Gracias ... mi respuesta es:
fuente
Lo anterior no funcionará, en mi experiencia, antes de que nombre el elemento raíz en la matriz como algo, no he podido acceder a nada en el json final antes de eso.
¡Eso debería hacer el truco!
Par
fuente
¡El siguiente código funciona bien aquí!
fuente
Mi solución simple para detenerlo colocando marcas de voz alrededor de valores numéricos ...
fuente
Lo sentimos, esto es extremadamente largo después de la pregunta, pero:
Solo básicamente:
fuente
GROUP_CONCAT()
está limitado porgroup_concat_max_len
.podríamos simplificar la respuesta de Paolo Bergantino como esta
fuente
aarray_push ($ filas, $ row_array); ayuda a construir una matriz, de lo contrario da el último valor en el ciclo while
este trabajo como método anexar de StringBuilder en java
fuente
Una opción más usando el bucle FOR:
La única desventaja es que el ciclo es más lento que, por ejemplo, mientras que o especialmente
fuente
Por ejemplo $ result = mysql_query ("SELECT * FROM userprofiles donde NAME = 'TESTUSER'");
1.) si $ result es solo una fila.
2.) si $ result es más de una fila. Debe iterar las filas y guardarlo en una matriz y devolver un json con la matriz en él.
fuente
Tengo el mismo requisito Solo quiero imprimir un objeto de resultado en formato JSON, así que uso el código a continuación. Espero que encuentres algo en él.
fuente
Verifique el siguiente código para usar mysql_fetch y json_encode. Tendrá que recorrer las filas, pero si usa mysqli, la situación cambiará.
fuente
Resolví así
Esto se devolverá a ajax como conjunto de resultados y mediante el uso de json parse en la parte de JavaScript de esta manera:
fuente
fuente
Código:
fuente
Tan sencillo como eso :-)
fuente
fuente