2015-11-11 87 views
-1

我試圖從我的用戶表中提取所有數據並以XML格式顯示它。連接工作正常,所有的事情,因爲我有一個登錄和註冊設置好,但我似乎無法得到這顯示除白色屏幕以外的任何東西。使用Mysqli從SQL生成XML

我發現了很多關於如何使用mysql而不是mysqli完成的教程。我錯過了什麼?

generatexml.php

<?php 
include 'connection.php'; 
$xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; 
$root_element = $config['users']; 
$xml .= "<$root_element>"; 

if ($result = $mysqli->query("SELECT * FROM users", MYSQLI_USE_RESULT)) { 
       while($row = $result->fetch_assoc()) 
       { 
       $xml .= "<".$config['users'].">"; 
       //loop through each key,value pair in row 
       foreach($result_array as $key => $value) 
        { 
        //$key holds the table column name 
        $xml .= "<$key>"; 
        //embed the SQL data in a CDATA element to avoid XML entity issues 
        $xml .= "<![CDATA[$value]]>"; 
        //and close the element 
        $xml .= "</$key>"; 
      } 
     $xml.="</".$config['users'].">"; 
    echo $xml; 
    } 

} 

?> 
+0

使用PHP的XML編寫器。 http://php.net/manual/en/book.xmlwriter.php –

+0

你打開error_reporting?如果你的if語句失敗,結果是「白屏」。 – svrnm

+1

'$ result_array'是否應該保存任何數據,還是隻是一個數字? –

回答

0

一個可能的問題可能是這一行:

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; 

一般情況下,你的目的,這將是更安全的使用PHP's XMLWriter extension,如已經提出。

0

我很努力地找到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); 
?>