簡體   English   中英

嘗試從mysql查詢寫入PHP fwrite XML文件

[英]Trying to write Php fwrite XML file from mysql query

我正在嘗試編寫一些代碼,以獲取CSV文件並提取相關的郵政編碼列,然后在具有經度和緯度字段的MySql數據庫中查找該郵政編碼,然后將其保存到XML文件中,以便可以在其他程序中使用

我認為這段代碼可以正常工作,但是由於某種原因,它只輸出查詢的最后一個字段:

//Open the file.
$fileHandle = fopen("test.csv", "r");
$postcode = array();
while (($row = fgetcsv($fileHandle, 0, ",")) !== FALSE) {
 array_push($postcode, $row[40]);
}
$postcodefil = (array_unique($postcode));
$postcodefil = str_replace(' ', '', $postcodefil);
$postcodefil = preg_replace('/\s+/', '', $postcodefil);
//print_r($postcodefil);
foreach ($postcodefil as $value) {
  // Create connection
  $conn = new mysqli($servername, $username, $password,   $dbname);
  // Check connection
  if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
  }
  $sql = "SELECT postcode, latitude, longitude  FROM postcode WHERE postcode='$value' ";
  $result = $conn->query($sql);
  if ($result->num_rows > 0) {
// output data of each row
    while($row = $result->fetch_assoc()) {
          $myfile = fopen("test.xml", "w") or die("Unable to open file!");
        $lat = $row["latitude"];
        $lng = $row["longitude"];
        fwrite($myfile, $lat."testss".$lng."\n");
        echo $lat;
        echo $lng;
        echo "<br />";
        }}
} // end of foreach
$conn->close();

但是,當我運行它時,它回顯正確

50.822398-0.139938
51.444908-1.295341
50.841951-0.842508
51.308504-0.551835
etc.... etc...

但是Fwrite只輸出最后一行

51.120916testss-0.599545

我對此完全感到困惑。 如果這是我已經忽略的基本內容,請原諒我,並在此先感謝。

問題是您在每個循環中打開文件,這會覆蓋以前的數據...

   $myfile = fopen("test.xml", "w") or die("Unable to open file!");
   while($row = $result->fetch_assoc()) {

因此,將開環移到循環外。

第二個問題是您根本沒有編寫XML。 您需要做類似...

$xml = simplexml_load_string("<coords />");

while($row = $result->fetch_assoc()) {
    $newCoord = $xml->addChild("coord");
    $newCoord->addChild("latitude", $row["latitude"]);
    $newCoord->addChild("longitude", $row["longitude"]);
}
$xml->saveXML("test.xml");

這將生成一個簡單的XML文件,您需要適當設置元素名稱。

首先,將連接置於foreach循環之外,並將fopen置於while循環之外。

您按照文檔的“ w”模式打開xml文件

僅開放寫作; 將文件指針放在文件的開頭,並將文件截斷為零長度。 如果該文件不存在,請嘗試創建它。

您需要附加模式“ a”

僅開放寫作; 將文件指針放在文件末尾。 如果該文件不存在,請嘗試創建它。 在這種模式下,fseek()無效,寫入始終會附加。

這將為您工作。 但是您仍然對每個郵政編碼發出數據庫請求,我建議收集所有需要查詢的郵政編碼,並使用sql IN運算符向數據庫發出一個數據庫請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM