【发布时间】:2014-07-16 14:19:30
【问题描述】:
我正在尝试将数据库记录放在多个 xml 文件中,但我无法做到这一点。基本上我在 db 表中有 200 行,我必须将它们放在 4 个不同的 xml 文件中,每个文件有 50 个。就像以前一样跨越 50 行,应该会自动生成一个新的 xml 文件。 但我无法开发 for 循环逻辑。
<?php
//Create Database connection
$mysqli = new mysqli('localhost', 'user', 'pass', 'dbname');
if (mysqli_connect_errno()) {
echo "Connection Failed: " . mysqli_connect_errno();
}
$query = 'select * from tablename';
$result = mysqli_query($mysqli, $query);
//Create SimpleXMLElement object
$xml = new SimpleXMLElement('<xml/>');
//Add each column value a node of the XML object
while ($row = mysqli_fetch_array($result)) {
$counter = 0;
if (count($row) % 50) {
$mydata = $xml->addChild('mydata');
$mydata->Id = $row['PID'];
$fp = fopen("sitemap$counter.xml", "wb");
//Write the XML nodes
fwrite($fp, $xml->asXML());
$xml = new XML();
} else {
$counter++;
}
}
mysqli_close($mysqli);
//Create the XML file
//Close the database connection
fclose($fp);
现在 db 表中有 200 行,我想制作 4 个不同的 xml 文件,每个 50 行。
我做不到。请帮忙
【问题讨论】:
-
将您的
fwrite内容放入循环中并跟踪您已加载的记录数。当你达到 50 时,你将 xml 转储到一个文件中,然后启动一个新文件并将计数器重置为 0。 -
inside loop 意味着在 while 循环中?我只会更新我得到的代码。请检查它是否正确?
-
您是否还有其他未在代码中显示的循环?
-
不,我没有任何其他循环。我刚刚用你所说的更新了我的代码。请检查它是否正确。如果不正确,请帮忙
-
您需要在每次将 $xml 对象转储到文件时重置它,否则您只会转储 50 条记录,然后转储 100 条记录,等等...另外,您使用的是 SAME文件名每次,所以你只是要删除你以前转储的记录。换句话说,除了现在多次写入文件而不是一次之外,您并没有取得太多成就。