0

私は、SQL クエリから PHP ファイルのデータをクライアント C# アプリケーションに返すことを目的としたアプリケーションに取り組んできました。

クエリは PHP 側で実行され、参照された XML クエリに読み込まれ、そこでクライアントに送信されます。その後、クライアントは XML を読み取り、必要なデータを抽出します。

しかし、私は少し混乱しています。何らかの理由で、すべての情報が返されるわけではありません。

PHP:

    $query =  "SELECT * FROM Parks";
    $result = mysql_query($query);

        while($row = mysql_fetch_array($result))
         {  
$array = array (
            $row['Name'] => 'Name',
            $row['File'] => 'File', 
            $row['Image'] => 'Image',
            $row['Description'] => 'Description',
            $row['Author'] => 'Author',
            $row['CS'] => 'CS',
            $row['Size'] => 'Size',
            $row['Theme'] => 'Theme',
            $row['Mountains'] => 'Mountains',
            $row['Hills'] => 'Hills',
            $row['Rivers'] => 'Rivers',
            $row['Lake'] => 'Lake',
            $row['Ocean'] => 'Ocean',
            $row['Island'] => 'Island',
            $row['SetOfIslands'] => 'Setofislands',
            $row['Waterfalls'] => 'Waterfalls',
            $row['Download'] => 'Download',
            $row['ID'] => 'ID',
            $row['Rating'] => 'Rating',
            $row['FileSize'] => 'FileSize',
            $row['DateUploaded'] => 'Dateuploaded',

            );
            $xml = new SimpleXMLElement('<Parks/>');
            array_walk_recursive($array, array ($xml, 'addChild'));
            echo $xml->asXML(); 

ただし、クライアント側では、XML に特定の値がありません。

たとえば、Run 1 は次の値を返しました: Name,FileImage,Description,Author,CS,Size,Theme,Lake,Waterfalls,Dateuploaded,Download,ID,Rating,FileSize

実行 2 が返される間: 名前、ファイル、画像、説明、作成者、CSSize、テーマ、滝、川、アップロード日、ダウンロード、ID、評価、ファイルサイズ

ご覧のとおり、最初の実行ではパラメーター 'Rivers' が返されませんが、2 回目の実行では返されます。実行ごとに異なる値が返されるようです。

データベースを確認したところ、欠落していたすべての値が「True」または「False」変数として保存されていました。それが何か関係があるかどうかはわかりませんが、返された結果をデータベースのデータと照合すると、良心がないことがわかりました。


要するに、私が要求しているすべてのデータが配列に格納されていないのはなぜですか?また、配列が格納することを選択するプロセスが非常にランダムに見えるのはなぜですか?

PS: 以前に各行をエコーバックしたところ、データベースの行の名前が正しく、データがその中に存在することを確認できました....


編集: 返された xml の例:

  <?xml version="1.0"?>
<Parks><Name>Some Name</Name>
<File>The File Path</File>
<Image>Link To Screenshot</Image>
<Description>Random description </Description>
<Author>Someone</Author>
<CS>False </CS><
Size>small</Size>
<Theme>space</Theme>
<Island>False</Island>
<Lake>True</Lake>
<Ocean>False</Ocean>
<Waterfalls>True</Waterfalls>
<Rating>0</Rating>
<ID>166</ID>
<FileSize>3706121</FileSize>
<Dateuploaded>2013-04-04</Dateuploaded>
</Parks>
4

1 に答える 1

1

問題は、データベース内の行の複数の列に同じ値を持ち、これらの値を配列のインデックスとして使用することです。

データベースにこの行がある場合:

File | Image | Rivers | Whatever
--------------------------------
1    | 1.jpg | true   | true

次を使用して配列を生成します。

while($row = mysql_fetch_array($result)) {  
    $array = array (
            $row['File'] => 'File', 
            $row['Image'] => 'Image',
            $row['Rivers'] => 'Rivers',
            $row['Whatever'] => 'Whatever'
    );
}

との両方が配列の同じインデックスに移動するため(この場合)、後者の値が前者を上書きするため、Rivers再び失敗します。RiversWhatevertrue

なので、@karmafunc がコメントで言ったように配列を作成し、array_keys key => value()` を使用してキーを取得します。

于 2013-05-15T14:42:37.107 に答える