Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
/applications/core/interface/imageproxy/imageproxy.php?img=http://oscaraguiar.com/codigo.png&key=b95c54fc206d595ad55a1572a8e59229355161f7697ca7e50f9c7fc6231fa2b4" />
Resultado no Browser
/applications/core/interface/imageproxy/imageproxy.php?img=http://oscaraguiar.com/array.png&key=3f2723e0a18e6544c5125efbd3d47bc7f5c15ce924534871a4c1300bbfe7873d" />
Agradeço a todos ai que puder me dá essa força !
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>
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
)
)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')]);
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.
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++
/applications/core/interface/imageproxy/imageproxy.php?img=http://wbruno.com.br/wp-content/uploads/2011/04/notepadutf.jpg&key=03b76c87fd47ed748cfad73a7eff90b458afb8fb5a34d323f49a236c6a9fea76" />
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);$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.
;)
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
}