0

mysqlクエリをXMLに変換したいので、このチュートリアルのコードを使用しました:http: //www.codediesel.com/php/converting-mysql-queries-to-xml/カスタマイズする必要がありましたmysql関数の代わりにPDOを使用してください。ここにコードがあります:

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; 
}

しかし、コードを実行しようとすると、次のエラーが発生します。注意:42行目の/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の配列から文字列への変換 nullnullnullnull

42行目は:

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

これについて何か考えがありますか?ありがとうございました :)

4

2 に答える 2

0

フィールド名が必要なので、文字列を返すと誤って考えたgetColumnMeta()によって返される連想配列からフィールド名を取得する必要があるため、次の行を置き換えるだけです。

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

これのために:

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

$fieldNameこれでフィールド名が含まれるようになり、残りのコードが機能するようになります。

于 2012-11-12T16:20:38.543 に答える
-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; 
}
于 2012-11-12T16:20:33.560 に答える