Jump to content
oscar009

Converter dados Mysql em JSON usando PHP

Recommended Posts

Olá pessoal ,

 

Eu estou fazendo um estudo para converter o resultado ou os dados do Mysql em Json , usando o PHP.

Porém não estou conseguindo fazer essa conversão. Por favor , alguém sabe me informar no que eu estou errando nesse código ?

Se eu fizer com uma variavel array , ai dá tudo certo para que ele fique no formato Json. Porém quando eu trago o resultado lá do Banco de Dados 

ele não fica no formato.

 

** == Meu Banco de dados == **

banco = dados  |   tabela = detalhes 

id = int | nome = varchar  | idade = varchar | cidade = varchar

 

codigo.png

 

Resultado no Browser

array.png

 

Agradeço a todos ai que puder me dá essa força !

Share this post


Link to post
Share on other sites

O teu erro esta no while. 

O correto é seu while ficar dessa forma:

while($resultado = mysql_fetch_assoc($sql)){
	$dados[] = array("nome" => $resultado['nome'], "idade" => $resultado['idade']); // assim por diante com todos os campos
 }

 

Share this post


Link to post
Share on other sites

Pq não usar a tag 'code' do site?!

Eu ia te explicar utilizando o seu código mas não rola eu escrever com screen shot de código.

 

Enfim pq não faz direto?

Utilizando PDO por exeplo ficaria assim:

<?php


$db = getConnection();
	
$stmt = $db->prepare("SELECT * FROM pessoa");	

if($stmt->execute()){
	$pessoas = $stmt->fetchAll(PDO::FETCH_OBJ);	
}

print json_encode($pessoas);

 

 

Outra coisa que pode estar ocorrendo é que o JSON é nativamente UTF-8

Caso você esteja utilizando outra codificação pode ser este o problema, ele retorna simplemente um NULL

 

Um exemplo de como 'resolver':

function castObjRowToUtf8($obj){
	//var_dump($obj);
	$objEncoded = new stdClass();
	foreach($obj as $col => $val){
		$objEncoded->$col = utf8_encode($val);
	}
	return $objEncoded;
}




$rows = $stmt->fetchAll(PDO::FETCH_OBJ);	

$pessoas = array();
foreach($rows as $row){	
	$pessoas[] = castObjRowToUtf8($row);
}

print json_encode($pessoas);

 

Apesar que recomendo fortemente utilizar utf-8 em projetos hoje em dia.

 

Em TUDO

Base, tipo de arquivo, tipo de consulta 

 

Share this post


Link to post
Share on other sites
4 horas atrás, wessleysanttos disse:

O teu erro esta no while. 

O correto é seu while ficar dessa forma:


while($resultado = mysql_fetch_assoc($sql)){
	$dados[] = array("nome" => $resultado['nome'], "idade" => $resultado['idade']); // assim por diante com todos os campos
 }

 

 

Obrigado Wessley ,

 

Porém fazendo da mesma maneira acima ele não converte para JSON.

Não sei o porque ele não converte. Se um array comum ele converte normal , porém quando é dados do Mysql ele não quer converter .

 

Veja abaixo o código que coloquei e ele não converteu ainda em JSON.

 

$sql = mysql_query("SELECT * FROM detalhes");
$dados = array();
while($resultado = mysql_fetch_assoc($sql)){
    $dados[] = array("id" => $resultado['id'], "nome" => $resultado['nome'], "idade" => $resultado['idade'], "cidade" => $resultado['cidade']);
 }

echo json_encode($dados);
echo "<pre>";
print_r($dados);
echo "</pre>";

 

RESULTADO NO BROWSER 

Array
(
    [0] => Array
        (
            [id] => 1
            [nome] => jose carlos
            [idade] => 35
            [cidade] => ribeirao preto
        )
    [1] => Array
        (
            [id] => 2
            [nome] => maria
            [idade] => 42
            [cidade] => jundiai
        )
    [2] => Array
        (
            [id] => 3
            [nome] => claudio
            [idade] => 33
            [cidade] => campinas
        )
)

 

 

 

 

 

 

 

 

Share this post


Link to post
Share on other sites

Pode ser a codificação como o gabrieldarezzo citou.

Veja se dessa forma vai:

while($resultado = mysql_fetch_assoc($sql)){
    $dados[] = array("id" => $resultado['id'], "nome" => utf8_decode($resultado['nome']), "idade" => $resultado['idade'], "cidade" => utf8_decode($resultado['cidade')]);

 

Share this post


Link to post
Share on other sites

Muito obrigado pessoal , 

Eu consegui resolver isso , o problema estava mesmo na configuração do utf8.

A forma que vocês informaram acima está correta .

 

Muito obrigado a todos.

Share this post


Link to post
Share on other sites

Apesar de 'resolver', recomendo fortemente converter o sistema se possível.

Tudo para o padrão UTF-8.

 

Como eu disse..

Banco e Arquivos.

Assim sempre que você vai trabalhar com Json não precisa ficar se preocupando em converter (utf8_decode/utf8_enconde)

 

Basicamente no Banco/Tabelas/Colunas em charset: utf-8 (ou 'utf8mb4_general_ci') 

 

Nos arquivos, caso Notepad++ 

notepadutf.jpg 

 

 

 No html onde você  efetua o seu submit é necessário sempre ter um meta na pagina:

<!DOCTYPE HTML>
<html lang="pt-BR">
<head>
	<meta charset="UTF-8">
	<title>Test</title>
</head>

 

 

Opcional: (ao receber o post)

<?php

header ('Content-type: text/html; charset=utf-8');

$nome = $_POST['nome'];

 

Opcional: (ao salvar/Puxar do banco):

<?php

$db = new PDO("mysql:host=localhost;dbname=bemean", 'root', '');  
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->exec("set names utf8"); //Garante UTF em versão < 5.3



$stmt = $db->query("select * from users");
$users = $stmt->fetchAll(PDO::FETCH_OBJ);
print json_encode($users);

 

Outra dica é, não utilize funções myqsl_*, esta lib está descontinuada (por isso o erro) 

 

Bons estudos.

;)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By gust.php
      Prezados, boa noite.
       
      Nunca fiz isso e estou dúvidas.
       
      Tenho as tabelas CATEGORIAS e SUBCATEGORIAS. Os cadastros e relacionamentos estão funcionando perfeitamente, tudo ok aqui.
      Tenho também a tabela PRODUTOS.
       
      Digamos que eu tenha produtos que fazem parte de categorias que não tem subcategoria, e tenho produtos que fazem parte de subcategorias de alguma categoria.
       
      Como fazer o relacionamento desses produtos?
       
      Vou relacionar a tabela PRODUTOS com CATEGORIAS e SUBCATEGORIAS ?
      A dúvida surgiu pois um produto pode fazer parte de uma categoria que não tem subcategoria, mas posso ter também produtos que fazem parte de subcategorias de uma categoria.
      E qual a cardinalidade desse relacionamento?
       
      Ja vi gente fazendo o relacionamento só com SUBCATEGORIA, mas e se não existir subcategoria????
       
      produto many to many categoria
      produto many to many subcategoria
       
      produto
      id | produto 
       
      prod_cat
      cat_id | prod_id
       
      categoria
      id | categoria 
       
      subcategoria
      id | categoria 
       
      prod_subcat
      subcat_id | prod_id
       
      Como resolver isso de um forma correta?
    • By Alex Dias
      Olá amigo, não sou usuário avançado, conseguir um código-fonte que lista arquivos de uma pasta no servidor, esses fontes listavam apenas os arquivos, daí eu dei uma incrementada nele para além dos arquivos ele listar também o tamanho do arquivo e a data da última modificação, segue ANEXO como ele está exibindo os resultados com perfeição.

      A minha dificuldade é que ele lista os arquivos da pasta por ordem alfabética de A a Z e eu gostaria muito que essa lista de arquivos fosse exibida por ordem de data de modificação decrescente, da mais atual para a mais antiga, e não estou conseguindo realizar essa tarefa, gostaria muito da ajuda dos amigos para solucionar esse ocorrido, desde já agradeço a ajuda de todos.

      Segue o código-fonte

       
      <?php //$diretorio = "D:\SERVIDOR-APACHE\PATRIMONIO TECNOLOGIA\images"; $diretorio = "/home/patrimonio/www/sites/default/files/ftpdata/download/Acesso Remoto"; //USADO PARA LISTAR OS ARQUIVOS DA PASTA $url = "sites/default/files/ftpdata/download/Acesso Remoto/"; // USADO PARA FAZER O LINK DE DOWNLOAD // abre o diretório $ponteiro = opendir($diretorio); // monta os vetores com os itens encontrados na pasta while ($nome_itens = readdir($ponteiro)) { $itens[] = $nome_itens; } // ordena o vetor de itens sort($itens); // percorre o vetor para fazer a separacao entre arquivos e pastas foreach ($itens as $listar) { // retira "./" e "../" para que retorne apenas pastas e arquivos if ($listar!="." && $listar!=".."){ // checa se o tipo de arquivo encontrado é uma pasta if (is_dir($listar)) { // caso VERDADEIRO adiciona o item à variável de pastas $pastas[]=$listar; } else{ // caso FALSO adiciona o item à variável de arquivos $arquivos[]=$listar; } } } // lista as pastas se houverem if ($pastas != "" ) { foreach($pastas as $listar){ print "";} } // lista os arquivos se houverem if ($arquivos != "") { foreach($arquivos as $listar){ //CONDICAO PARA NOMEAR EM BYTES, KB, MB, GB, TB $tamanho = filesize("$url/$listar"); $kb = "1024"; $mb = "1048576"; $gb = "1073741824"; $tb = "1099511627776"; if($tamanho<$kb){ $tamanho_resposta = ($tamanho." bytes"); }else if($tamanho>=$kb&&$tamanho<$mb){ $kilo = number_format($tamanho/$kb,2); $tamanho_resposta = ($kilo." KB"); }else if($tamanho>=$mb&&$tamanho<$gb){ $mega = number_format($tamanho/$mb,2); $tamanho_resposta = ($mega." MB"); }else if($tamanho>=$gb&&$tamanho<$tb){ $giga = number_format($tamanho/$gb,2); $tamanho_resposta = ($giga." GB"); } // FIM CONDICAO PARA NOMEAR EM BYTES, KB, MB, GB, TB // DATA DA ULTIMA MODIFICACAO $modificado = date("d/m/Y H:i:s", filemtime("$url/$listar"))."<br>"; // FIM DATA DA ULTIMA MODIFICACAO //echo"$modificado"; // FAZ A LISTA DE XIBICAO DOS AQRUIVOS DO DIRETORIO // FAZ A LISTA DE XIBICAO DOS AQRUIVOS DO DIRETORIO echo" <tr> <td width='438' height='30' bgcolor='#ffffff'><p><font size='2'>&nbsp;&nbsp;<a href='$url/$listar' target='_blank'>$listar</a></font></p></td> <td width='192' bgcolor='#ffffff'><p><font size='2'>&nbsp;&nbsp;$tamanho_resposta</font></p></td> <td width='340' bgcolor='#ffffff'><p><font size='2'>&nbsp;&nbsp;$modificado</font></p></td> <td width='202' bgcolor='#ffffff'><p align='center'><a href='$url/$listar' target='_blank'><img src='images/nuvem.jpg'/></a></p></td> </tr> "; } } else { echo "<p><font color='#ff0000' size='3'>Não há nenhum arquivo.</font><p><br>"; } echo"</table>" ?>  

    • By danicarla
      Oi gente.. tenho uma tabela de endereços e uso php para fazer dois loops para exibir as cidades e depois os bairros daquela cidade,
      fica algo + ou - assim:
      $a = mysql_query('SELECT nome_cidade FROM tab GROUP BY nome_cidade'); while($b = mysql_fetch_array($b)){ echo $b['nome_cidade'].'<br>'; $c = mysql_query('SELECT nome_bairro FROM tab WHERE nome_cidade='$b[nome_cidade]' GROUP BY nome_bairro'); while($d = mysql_fetch_array($c)){ echo $d['nome_bairro'].'<br>'; } } Alguém sabe se eu consigo fazer isso somente com uma consulta? pra não precisar incluir um loop dentro do outro
    • By luialcantara
      Olá, a empresa onde trabalho tem uma página de login para área restrita que está com problema na função de cadastro. O formulário está enviando os dados para o banco de dados e o usuário se torna ativo para acesso normalmente. O problema é que a mesma função que salva os dados deveria redirecionar o cliente para a área restrita ou então para a página inicial para que ele digite usuário e senha e consiga acessar a página. 
       
      A página já estava pronta quando comecei aqui e eu não tenho domínio sobre php, mas já corrigi alguns erros que estavam impedindo o cadastro. Porém os clientes reclamam pois após concluir o cadastro a imagem de carregamento não desaparece, então apenas coloquei um delay para evitar os questionamentos, pois o usuário fica ativo, então é só voltar para o login que eles conseguem usar nosso site.
       
      A página está dividida entre uma de login (php), uma para cadastro (php) e a principal, que está no wordpress. 
       
      Função do formulário de cadastro:
                  submitHandler: function(form) {                 $(".botoesactions").hide();                 $(".ajaxloader").show();                 var dados = jQuery( form ).serialize();                  $(".ajaxloader").fadeOut(1500);                 $.ajax({type: "POST", data: dados, url:"<?php echo get_site_url(); ?>/atendimento/cadastrar",success: function(data){                     console.log(data);                     try {             var ret = JSON.parse(data);                     } catch (e) {          var ret = false;                    }                     $(".ajaxloader").hide();                     if(ret !== false && ret.retorno === "ok"){                         console.log(ret);                         alert("Cadastrado realizado com sucesso!");                         window.location.href = "<--!?php echo get_site_url(); ?-->/atendimento/";                     }else if(ret !== false && ret.retorno === "fail"){                         alert(ret.mensagem);                         $(".botoesactions").show();                     }else{                         $(".botoesactions").show();                     }                 }});             }  
       
      Função de inserção de informações no banco de dados:
      elseif('cadastrar' == $syjusaten){                         if(!isset($_SESSION) || !isset($_SESSION['jusate_session']['answeris']) || $_SESSION['jusate_session']['answeris'] != 42 ){                 if($_POST && $_POST['typos'] == "iscadastro"){                     $url= $urlServer.'/Cliente/ClienteSite/cadastraclientesite';                     $parms = array(                         "usuario" => $_POST['user'],                         "Senha" => $_POST['pass'],                         "Cliente.ClienteId" => $_POST['clienteId'],                         "Cliente.Nome" => $_POST['nome'] /*Existem outros dados, mas acho que ficaria muito codigo e não contribuem para erro*/                     );                     $respServer = syJuCurl($url, $parms);                     if($respServer == ""){                         echo json_encode( array(                             "retorno" => "fail",                             "mensagem" => "Não foi possivel realizar o cadastro. Tente novamente mais tarde"                         ));                     }else{     echo $respServer;                         }                 }else{                     echo "ELSEE";                     header("Location: ".get_site_url()."/atendimento");                 }                         exit;             }else{                 header("Location: ".get_site_url()."/atendimento/");             }         }  
      Agradeço pela atenção ;)
       
    • By TheRonaldoStar
      Olá, Venho aqui de novo para tirar uma dúvida que creio eu ser muito simples porem não sei como aplicar!;
      Como diz no título do post eu gostaria de fazer um select de cadastros cujo o id do usuário online está nesta coluna,
      Porem neste campo contem 2 id separados por uma ' , '. Sendo assim não dar para mim fazer uma pesquisa com com a tag WHERE id ='Valor'
      Em fim eu quero ajuda para selecionar todos os cadastro cujo o id do usuário online está por EX: Sou o usuário 1 existe dois cadastros que tem meu id: [1, 2] e [2, 1];
      Alem de pesquisar todos os cadastros que tenha meu id nesta coluna eu quero que não tenha interferência ou listar cadastro do usuário 1 se eu for o usuário 21 por ex.
       
      Qual quer ajuda é bem vinda!
      Atenciosamente,
      ~Ronaldo
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.