2013-05-15 25 views
0

我一直在努力處理我的應用程序,該應用程序旨在將來自PHP文件的sql查詢中的數據返回給客戶端C#應用程序。PHP引用數組

查詢在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中缺少某些值。

例如, 運行1返回的值: 名稱,FileImage,說明,作者,CS,大小,主題,湖,瀑布,Dateuploaded,下載,ID,等級,文件大小

在運行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> 
+2

您的鑰匙不應該在價值之前。key =>值 – karmafunk

+0

順便說一句,你應該使用'mysql_fetch_assoc'而不是'mysql_fetch_array'。 – mpyw

+0

「河流」後面沒有''',肯定是一個錯字,但看看。 – Voitcus

回答

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,因爲這兩個RiversWhatever要相同指數該數組(在這種情況下爲true),所以後者的值會覆蓋前者。

所以,像@karmafunc這樣在註釋key => value中創建數組,並使用array_keys()`來獲取密鑰。

+0

這很有道理。這僅僅是因爲我有鑰匙和價值錯誤的方式,因此,它只是相互覆蓋...... 不幸的是,我必須將數組轉換爲xml的代碼需要以這種方式工作。然而,現在我知道這個問題,我相信我可以快速解決:) 謝謝你的答案! – user1662290

+0

歡迎您:) –