首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试从mysql查询编写文件

问尝试从mysql查询编写文件
EN

Stack Overflow用户
提问于 2018-10-03 15:36:57
回答 2查看 145关注 0票数 0

我试图编写一些代码来抓取CSV文件,拉出相关的邮政编码列,然后在具有经度和纬度字段的MySql数据库中查找该邮政编码,然后将它们保存到XML文件中,以便在不同的程序中使用。

我认为这段代码都正常工作,但出于某种原因,它只输出查询的最后一个字段:

代码语言:javascript
复制
//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();

然而,当我运行它时,它的回声是正确的

代码语言:javascript
复制
50.822398-0.139938
51.444908-1.295341
50.841951-0.842508
51.308504-0.551835
etc.... etc...

但是Fwrite只输出最后一行

代码语言:javascript
复制
51.120916testss-0.599545

我完全被这事搞糊涂了。如果这是我事先看过的最基本的东西,请原谅。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-03 15:44:16

问题是在每个循环中打开文件,这会覆盖以前的数据.

代码语言:javascript
复制
   $myfile = fopen("test.xml", "w") or die("Unable to open file!");
   while($row = $result->fetch_assoc()) {

所以把打开的东西移到回路外面。

第二个问题是您根本没有编写XML。你需要做些像..。

代码语言:javascript
复制
$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文件,您需要酌情设置元素名称。

票数 1
EN

Stack Overflow用户

发布于 2018-10-03 15:47:25

第一件事是将连接放在foreach循环之外,而fopen放在while循环之外。

根据doc,以“w”模式打开xml文件意味着

打开仅供写入;将文件指针放在文件的开头,并将文件截断为零长度。如果文件不存在,请尝试创建它。

你需要附加模式'a‘

打开仅供写入;将文件指针放在文件的末尾。如果文件不存在,请尝试创建它。在这种模式下,fseek()没有任何效果,写总是附加在后面。

这对你有用。但是,您仍然对每个邮政编码提出db请求,我建议您收集查询所需的所有邮政编码,并使用sql 在……里面操作符向数据库发出一个db请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52630810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档