1

PHPページを使用してMySQLデータベースのデータを取得し、xml構造を使用してそれを実行していましたが、JSONが少し速く見つかったため、すべてのWebサーバーをそれに移行することにしました。

データベースからデータを取得するためにまったく同じコードを使用していますが、生成されたJSONはすべてのデータを取得できません。のような一部のフィールドDescription、およびのような他のフィールドはNome、nullオブジェクトとして表示されることがあります。データベースではすべてが正常であり、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:リンク

比較のためのXML:リンク

4

2 に答える 2

1

whileループでの変換は不要であり、ここでのみ間違いを犯すことができます。の状態で使用mysql_fetch_object($result)し、配列に配置するだけですmysql_fetch_array($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);

特別な文字も面倒なことがあります。この質問は役に立つと思います

于 2012-11-13T14:07:35.767 に答える
1

ポルトガル語の「descrição」contildeとcedilleを使用している場合は、キーの名前または結果をUTF8でエンコードする必要があり、列名とキー名の間にキーの不一致エラーが発生する可能性があります。結果をJSONにエクスポートする前に結果をチェックして、説明が含まれているかどうかを確認してください。

于 2012-11-13T14:13:50.503 に答える