Php 使用Mysqli从SQL生成XML
我试图从users表中提取所有数据并以XML格式显示。连接工作正常,一切正常,因为我有一个登录和注册设置,但我似乎无法让它显示任何东西,除了一个白色屏幕 我找到了很多关于如何使用mysql而不是mysqli的不同教程。我错过了什么 generatexml.phpPhp 使用Mysqli从SQL生成XML,php,xml,mysqli,Php,Xml,Mysqli,我试图从users表中提取所有数据并以XML格式显示。连接工作正常,一切正常,因为我有一个登录和注册设置,但我似乎无法让它显示任何东西,除了一个白色屏幕 我找到了很多关于如何使用mysql而不是mysqli的不同教程。我错过了什么 generatexml.php 一个可能的问题可能是这一行: if ($result = $mysqli->query("SELECT * FROM users", MYSQLI_USE_RESULT)) { 尝试过程方法而不是面向对象方法。我不知道conne
一个可能的问题可能是这一行:
if ($result = $mysqli->query("SELECT * FROM users", MYSQLI_USE_RESULT)) {
尝试过程方法而不是面向对象方法。我不知道connection.php中是否定义了$mysqli,但可能是您混淆了它
if ($result = mysqli_query('SELECT * FROM users', MYSQLI_USE_RESULT)) {
这可以解决白屏错误
我注意到另外两件事:
1一个微小的有效性问题:
$xml = '<?xml version="1.0" encoding="UTF-8"?>';
因此,您不需要跳过每个引号
2一个严重的XML问题:在回显$XML之前,需要关闭根元素
$xml .= "</$root_element>";
echo $xml;
一般来说,就您的目的而言,正如已经提出的那样,使用它会更安全。我很难找到mysqli格式的解决方案,但我没有找到解决方案。下面是我想到的解决方案。运行此演示并将其映射到您的需求,肯定会有所帮助
<?php
//Create file name to save
$filename = "export_xml_".date("Y-m-d_H-i",time()).".xml";
$mysql = new Mysqli('server', 'user', 'pass', 'database');
if ($mysql->connect_errno) {
throw new Exception(sprintf("Mysqli: (%d): %s", $mysql->connect_errno, $mysql->connect_error));
}
//Extract data to export to XML
$sqlQuery = 'SELECT * FROM t1';
if (!$result = $mysql->query($sqlQuery)) {
throw new Exception(sprintf('Mysqli: (%d): %s', $mysql->errno, $mysql->error));
}
//Create new document
$dom = new DOMDocument;
$dom->preserveWhiteSpace = FALSE;
//add table in document
$table = $dom->appendChild($dom->createElement('table'));
//add row in document
foreach($result as $row) {
$data = $dom->createElement('row');
$table->appendChild($data);
//add column in document
foreach($row as $name => $value) {
$col = $dom->createElement('column', $value);
$data->appendChild($col);
$colattribute = $dom->createAttribute('name');
// Value for the created attribute
$colattribute->value = $name;
$col->appendChild($colattribute);
}
}
/*
** insert more nodes
*/
$dom->formatOutput = true; // set the formatOutput attribute of domDocument to true
// save XML as string or file
$test1 = $dom->saveXML(); // put string in test1
$dom->save($filename); // save as file
$dom->save('xml/'.$filename);
?>
这里是一个仅使用php的解决方案。你离做正确的事情很近了。这是代码的关键部分,我将$row更改为$key=>$data used$row,而不是$result_数组,即迭代行而不是结果_数组。这包含整个数据集。希望这对别人有帮助
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$value .="<record>\r\n";
//loop through each key,value pair in row
foreach($row as $key => $data)
{
//$key holds the table column name
$vals = "\t" . "<". $key . ">" . "<![CDATA[" . $data . "]]>" . "</" . $key . ">" . "\r\n";
$value = $value . $vals;
//echo $value;
}
$value .="</record>\r\n";
$count++;
}
} else {
// echo "0 results";
}
$conn->close();
使用PHP的XML编写器。你打开错误报告了吗?如果if语句失败,也会出现一个白色屏幕。“$result\u array”应该保存任何数据还是仅仅是一个数字?正如@code kobold所提到的,您似乎在使用$row保存返回的每一行的数据,但您正在尝试循环$result\u array。您需要更改这些,以便它们匹配。您的查询也可能由于某种原因而失败,或者某个地方出现了致命错误——这两种情况都可能产生一个白色屏幕。打开错误报告或检查日志,查看是否存在任何错误。
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$value .="<record>\r\n";
//loop through each key,value pair in row
foreach($row as $key => $data)
{
//$key holds the table column name
$vals = "\t" . "<". $key . ">" . "<![CDATA[" . $data . "]]>" . "</" . $key . ">" . "\r\n";
$value = $value . $vals;
//echo $value;
}
$value .="</record>\r\n";
$count++;
}
} else {
// echo "0 results";
}
$conn->close();