2012-11-13 68 views
1

我使用的是PHP頁面以獲取在我的MySQL數據庫的一些數據,我是用XML結構要做到這一點,但因爲我發現JSON快一點,我決定遷移我的所有網絡服務器到。PHP的Json沒有一致

我使用完全相同的代碼從數據庫中檢索數據,但是生成的JSON無法獲取所有數據;一些字段如Description和其他類似Nome,有時會作爲空對象出現。在數據庫中一切正常,XML腳本仍然運行正常。

下面是我使用的PHP腳本:

<?php 
    header('Content-type: application/json'); 

    $banco = "*******"; 
    $usuario = "*******"; 
    $senha = "*******"; 
    $hostname = "localhost"; 

    $conn = mysql_connect($hostname,$usuario,$senha); mysql_select_db($banco) or die("Cant Connect MySQL"); 

    $result = mysql_query("SELECT * FROM users"); 
    $arrayOfChildren = Array(); 
    $i = 0; 
    while($row = mysql_fetch_array($result)) 
    { 
     $Balada = array(
      'Id'=>($row['Id']), 
      'Nome'=>($row['Nome']), 
      'Endereco'=> ($row['Endereco']), 
      'Telefone'=>($row['Telefone']), 
      'Description'=>($row['Descricao']), 
      'Genero' => ($row['Genero']), 
      'Pagamento' => ($row['FormasPagamento']), 
      'NomeLista' => ($row['NomeLista']) 
     );  
     $arrayOfChildren[] = $Balada;  
     $i++; 
    } 
    $myJSON = json_encode($arrayOfChildren); 
    echo($myJSON); 
    ?> 

生成的JSON:Link

的XML爲comparsion:Link

+0

您使用的是葡萄牙語的描述嗎? –

+0

不,它在我的數據庫中的列 – darkman

回答

1

翻譯while循環是不必要的,你只能在這裏犯錯。只需在mysql_fetch_array($result)的staid中使用mysql_fetch_object($result),並將$row放入數組中。

$arrayOfChildren = Array(); 
while($row = mysql_fetch_object($result)) $arrayOfChildren[] = $row ; 
echo json_encode($arrayOfChildren); 

甚至更​​好,你可以使用PDO或MSQLi。這裏是一個MSQLi例如:

$mysqli = new mysqli($hostname,$usuario,$senha, $banco); 
$result = $mysqli->query("SELECT * FROM users"); 
$rows = Array(); 
while ($row = $result->fetch_object()) $rows[] = $row; 
echo json_encode($rows); 

特殊字符可以是一個麻煩太..我想this question可能是有用的

+0

需要的utf8_encode() – darkman

1

如果您使用葡萄牙語「descrição」 CON波浪和cedille,也許你需要UTF8對鍵或結果的名稱進行編碼,並且可能在列名和鍵名之間存在不匹配鍵錯誤。在將它們導出到JSON之前檢查結果,看它們是否包含描述。

+0

這是正確的,我檢查了他們,並在xml查詢我使用幾乎相同的代碼 – darkman

+0

json_encode將不會取消任何一列。你的arrayOfChildren在json_encode命令之前是否有描述? –

+0

你可以var_export arrayOfChildren? –