查询XML,注意:数组到字符串的转换

时间:2012-11-12 16:10:48

标签: php xml

我想将我的mysql查询转换为 XML ,为此我使用了本教程的代码:http://www.codediesel.com/php/converting-mysql-queries-to-xml/我必须自定义它以使用 PDO 而不是 mysql 函数。 这是代码:

function sqlToXml($queryResult, $rootElementName, $childElementName)
{ 
    $xmlData = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n"; 
    $xmlData .= "<" . $rootElementName . ">";

    while($record = $queryResult->fetch(PDO::FETCH_OBJ))
    { 
        /* Create the first child element  */
        $xmlData .= "<" . $childElementName . ">";

        for ($i = 0; $i < $queryResult->columnCount(); $i++)
        { 
            $fieldName = $queryResult->getColumnMeta($i);

            /* The child will take the name of the table column  */
            $xmlData .= "<" . $fieldName . ">";

            /* We set empty columns with NULL, or you could set 
                it to '0' or a blank. */
            if(!empty($record->$fieldName))
                $xmlData .= $record->$fieldName; 
            else
                $xmlData .= "null"; 

            $xmlData .= "</" . $fieldName . ">"; 
        } 
        $xmlData .= "</" . $childElementName . ">"; 
    } 
    $xmlData .= "</" . $rootElementName . ">"; 

    return $xmlData; 
}

但是当我尝试执行代码时,我收到此错误: 注意: /opt/lampp/htdocs/promos/t.php 中的数组到字符串转换 42

注意: /opt/lampp/htdocs/promos/t.php 中的数组到字符串转换 42

注意: /opt/lampp/htdocs/promos/t.php 中的数组到字符串转换 42

注意: /opt/lampp/htdocs/promos/t.php 中的数组到字符串转换 42 nullnullnullnull

42 这一行是:

if(!empty($record->$fieldName))

你对此有任何想法吗?谢谢:))

2 个答案:

答案 0 :(得分:0)

你想要fieldname,所以你必须从getColumnMeta()返回的关联数组中检索它,你错误地认为它返回了一个字符串,所以只需替换你的下一行:

$fieldName = $queryResult->getColumnMeta($i);

这个:

$fieldName = $queryResult->getColumnMeta($i);
$fieldName = $fieldName['name'];

应该使$fieldName包含字段名称,以便其他代码可以使用。

答案 1 :(得分:-1)

函数getColumnMeta返回一个数组。不是一个字符串。 除此之外,它标志着实验性。我不会在生产代码上使用它,直到它变得更稳定。

但我认为这应该有用

function sqlToXml($queryResult, $rootElementName, $childElementName)
{ 
    $xmlData = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n"; 
    $xmlData .= "<" . $rootElementName . ">";


    while($record = $queryResult->fetch(PDO::FETCH_OBJ))
    { 
        /* Create the first child element  */
        $xmlData .= "<" . $childElementName . ">";

        for ($i = 0; $i < $queryResult->columnCount(); $i++)
        { 
            $colum = $queryResult->getColumnMeta($i);
            $fieldName = $column['name'];

            /* The child will take the name of the table column  */
            $xmlData .= "<" . $fieldName . ">";

            /* We set empty columns with NULL, or you could set 
                it to '0' or a blank. */
            if(!empty($record->$fieldName))
                $xmlData .= $record->$fieldName; 
            else
                $xmlData .= "null"; 

            $xmlData .= "</" . $fieldName . ">"; 
        } 
        $xmlData .= "</" . $childElementName . ">"; 
    } 
    $xmlData .= "</" . $rootElementName . ">"; 

    return $xmlData; 
}