Como uso a json_encode()função com os resultados da consulta MySQL? Preciso percorrer as linhas ou posso apenas aplicá-lo a todo o objeto de resultados?
Eu sei que esta é uma pergunta muito antiga. Mas ninguém mostra a alternativa mais simples para corrigir o problema de números inteiros aparecerem como strings. @mouckatron oferece o sinalizador JSON_NUMERIC_CHECK json_encode()na resposta abaixo. Simples e funciona como um encanto! stackoverflow.com/questions/1390983/…
Eu recomendaria que você mencionasse que, durante a consulta de seleção a ser usada ASpara renomear as colunas para algo público, como SELECT blog_title as title, por exemplo , isso é mais limpo e o público não sabe quais são as colunas exatas do banco de dados.
31411 Robert Pitt
14
Esse código codifica erroneamente todos os valores numéricos como seqüências de caracteres. Por exemplo, um campo numérico do mySQL chamado score teria um valor JSON de "12" em vez de 12 (observe as aspas).
este, nos dará uma matriz contendo; 1) um colchete quadrado vazio 2) seguido pelo colchete contendo nossas linhas de resultados retornadas, o que é diferente do outro?
A descrição acima não funcionará, na minha experiência, antes que você nomeie o elemento-raiz no array como algo, eu não consegui acessar nada no json final antes disso.
Desculpe, isso é extremamente longo após a pergunta, mas:
$sql ='SELECT CONCAT("[", GROUP_CONCAT(CONCAT("{username:'",username,"'"), CONCAT(",email:'",email),"'}")), "]")
AS json
FROM users;'
$msl = mysql_query($sql)print($msl["json"]);
Apenas basicamente:
"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.) se $ result for mais de uma linha. Você precisa iterar as linhas, salvá-lo em uma matriz e retornar um json com a matriz.
$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);
Eu tenho o mesmo requisito. Eu só quero imprimir um objeto de resultado no formato JSON, para usar o código abaixo. Espero que você encontre algo nele.
// 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()
na resposta abaixo. Simples e funciona como um encanto! stackoverflow.com/questions/1390983/…Respostas:
A função
json_encode
precisa do PHP> = 5.2 e do pacote php-json - como mencionado aquiNOTA :
mysql
está obsoleto no PHP 5.5.0, use amysqli
extensão http://php.net/manual/en/migration55.deprecated.php .fonte
AS
para renomear as colunas para algo público, comoSELECT blog_title as title
, por exemplo , isso é mais limpo e o público não sabe quais são as colunas exatas do banco de dados.Tente isso, isso criará seu objeto corretamente
fonte
http://www.php.net/mysql_query diz "
mysql_query()
retorna um recurso".http://www.php.net/json_encode diz que pode codificar qualquer valor "exceto um recurso".
Você precisa percorrer e coletar os resultados do banco de dados em uma matriz e depois
json_encode
na matriz.fonte
Graças a isso me ajudou muito. Meu código:
fonte
Obrigado .. minha resposta:
fonte
A descrição acima não funcionará, na minha experiência, antes que você nomeie o elemento-raiz no array como algo, eu não consegui acessar nada no json final antes disso.
Isso deve fazer o truque!
Par
fonte
O código abaixo funciona bem aqui!
fonte
Minha correção simples para impedi-lo de colocar marcas de fala em torno de valores numéricos ...
fonte
Desculpe, isso é extremamente longo após a pergunta, mas:
Apenas basicamente:
fonte
GROUP_CONCAT()
é limitado porgroup_concat_max_len
.poderíamos simplificar a resposta de Paolo Bergantino assim
fonte
aarray_push ($ linhas, $ row_array); ajudar a construir matriz, caso contrário, dê o último valor no loop while
este trabalho como método de acréscimo de StringBuilder em java
fonte
Mais uma opção usando o loop FOR:
A única desvantagem é que o loop for é mais lento do que, por exemplo, while ou especialmente foreach
fonte
Por exemplo $ result = mysql_query ("SELECT * FROM userprofiles where NAME = 'TESTUSER'");
1.) se $ result for apenas uma linha.
2.) se $ result for mais de uma linha. Você precisa iterar as linhas, salvá-lo em uma matriz e retornar um json com a matriz.
fonte
Eu tenho o mesmo requisito. Eu só quero imprimir um objeto de resultado no formato JSON, para usar o código abaixo. Espero que você encontre algo nele.
fonte
Verifique o código abaixo para usar mysql_fetch e json_encode. Você precisará percorrer as linhas, mas se você usar o mysqli, a situação mudará
fonte
Eu resolvi assim
Isso será retornado ao ajax como conjunto de resultados e usando json parse na parte javascript como esta:
fonte
fonte
Código:
fonte
tão simples como isso :-)
fonte
fonte