Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Mysqli从SQL生成XML_Php_Xml_Mysqli - Fatal编程技术网

Php 使用Mysqli从SQL生成XML

Php 使用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

我试图从users表中提取所有数据并以XML格式显示。连接工作正常,一切正常,因为我有一个登录和注册设置,但我似乎无法让它显示任何东西,除了一个白色屏幕

我找到了很多关于如何使用mysql而不是mysqli的不同教程。我错过了什么

generatexml.php


一个可能的问题可能是这一行:

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();