[英]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.