
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte
Unternehmen im
Anbieterverzeichnis von SELFPHP
:: SELFPHP Forum ::
Fragen rund um die Themen PHP? In über
120.000 Beiträgen finden Sie sicher die passende
Antwort! 
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
:: Qozido ::
Die Bilderverwaltung mit Logbuch für
Taucher und Schnorchler. 
|
|
Datenbank-Export-Modul nach YAML, CSV oder XML  |
Beispielaufgabe
Nachfolgend stellen wir Ihnen eine Klasse in PHP5 vor, mit der Sie eine Datenbanktabelle komplett in verschiedene Ausgabe-Formate konvertieren können. Die Klasse unterstützt dabei die Speicherung in den Formaten YAML, CSV oder XML.
Bei der Speicherung der Daten werden auch gleich die Namen der Spalten in die Ausgabe gespeichert. Die so erstellte Datei kann dann mit beliebigen Programmiersprachen wieder reibungslos in andere Formate oder in eine neue Datenbank gespeichert werden.
Gerade wenn es um den Austausch von Daten zwischen verschiedenen Programmen geht, kann die Klasse für die Konvertierung der Daten nützlich sein.
Nachfolgend sehen Sie den Zugriff auf die Klasse.
<?php
define ( 'DB_HOST', 'localhost' ); // MySQL Host
define ( 'DB_NAME', 'Datenbank' ); // MySQL Database
define ( 'DB_USER', 'Username' ); // MySQL User
define ( 'DB_PASS', 'Paswort' ); // MySQL Password
$connectDb = @mysql_connect( DB_HOST , DB_USER , DB_PASS );
$sql = @mysql_select_db( DB_NAME , $connectDb );
$query = mysql_query("SELECT * FROM testletter WHERE 1");
include("exportModul.php");
$exportTo = array('yaml','csv','xml');
$exportToFile = array('yml','csv','xml');
$exportContentType = array('yml','csv','text/xml');
// Ausgabe 0 -> YAML, 1 -> CSV, 2 -> XML
$outputTo = 0;
// Create Database connect
$db = new exportModul( $exportTo[$outputTo] );
$db -> beginTransaktion( $query );
//echo $db -> getLastMessage();
//echo $db -> getOutput();
$fp = fopen ( 'output.' . $exportToFile[$outputTo], 'w' );
fputs ( $fp, $db -> getOutput() );
fclose ( $fp );
$filename = strftime("Testletter-%H.%M.%S-").'.'.$exportToFile[$outputTo];
// Datei zum Download anbieten
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header ( 'Content-type: '.$exportContentType[$outputTo] );
header('Content-Disposition: attachment; filename="' . $filename.'"');
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize( 'output.' . $exportToFile[$outputTo] ));
readfile('output.' . $exportToFile[$outputTo]);
?>
|
exportModul.php
Hier sehen Sie noch die vollständige Klasse für die Konvertierung der Daten.
<?php
/**
* Datenbank-Export-Modul --> YAML, CSV, XML
*
* @author SELFPHP OHG
* @copyright 2010, SELFPHP OHG
* @license BSD License
* @link http://www.selfphp.de
*
*/
class exportModul {
/**
* @var string yaml,xml,
*/
private $exportTo = "yaml";
/**
* @var string The last Error
*/
private $lastError = "";
/**
* @var array The field names from the result
*/
private $columns = array();
/**
* @var integer Count fields from the result
*/
private $fields = 0;
/**
* @var string Store the export datas
*/
private $exportData = '';
/**
* Constructor
*
* @param string $exportVariant The Export Variant (e.g. YAML, XML, CSV ...)
*/
function __construct( $exportVariant = "yaml" ) {
$this->exportTo = $exportVariant;
}
/**
* Get the last message
*
* @return string The last error message
*/
public function getLastMessage () {
return $this->lastError;
}
/**
* Get the Output
*
* @return string The Output data
*/
public function getOutput () {
return $this->exportData;
}
/**
* Begin the different transaction (e.g. export to YAML)
*
* @param resource $sqlResult The MySQL Result
*
* @return boolean True or False
*/
public function beginTransaktion( $sqlResult = FALSE ) {
$this->lastError = "";
if ( !$sqlResult ) {
$this->lastError = mysql_error();
return false;
}
if ( @mysql_num_rows( $sqlResult ) == 0 ) {
$this->lastError = "empty result...";
return false;
}
$this->getFieldNames( $sqlResult );
if ( $this->exportTo == "yaml" )
return $this->exportToYaml( $sqlResult );
elseif ( $this->exportTo == "xml" )
return $this->exportToXml( $sqlResult );
elseif ( $this->exportTo == "csv-excel" )
return $this->exportToCsv( NULL, $sqlResult, ',', '"', TRUE );
else
return $this->exportToCsv( NULL, $sqlResult, ',', '"', TRUE );
}
/**
* Store the Field Names from a MySQL Result
*
* @param resource $sqlResult The MySQL Result
*
* @return boolean True
*/
private function getFieldNames( $sqlResult ) {
$this->columns = array();
$this->fields = @mysql_num_fields( $sqlResult );
for ( $i = 0; $i < $this->fields; $i++ ) {
$this->columns[$i] = stripslashes( mysql_field_name( $sqlResult, $i ) );
}
return true;
}
/**
* Export Data to YAML
* YAML Ain't Markup Language
* YAML is a human friendly data serialization standard for all programming languages.
* More Details: http://www.yaml.org/
*
* @param resource $sqlResult The MySQL Result
*
* @return boolean True
*/
private function exportToYaml( $sqlResult ) {
$number = 0;
$crlf = "\n";
$this->exportData = '';
@mysql_data_seek( $sqlResult, 0 );
while ( ( $row = mysql_fetch_row( $sqlResult ) ) ) {
$number++;
$this->exportData .= $number . ":$crlf";
for ($i = 0; $i < $this->fields; $i++) {
if (isset($row[$i]) && !is_null($row[$i])) {
$this->exportData .= ' ' . $this->columns[$i] . ': ' . htmlspecialchars($row[$i]) . $crlf;
}
}
}
return true;
}
/**
* Export Data to XML
*
* @param resource $sqlResult The MySQL Result
*
* @return boolean True
*/
private function exportToXml( $sqlResult ) {
$crlf = "\n";
$charset = 'iso-8859-1';
$table = 'SELFPHP-Newsletter-Data';
$tableHead = 'Mailing-Data';
$this->exportData = '<?xml version="1.0" encoding="' . $charset . '" ?>' . $crlf;
$this->exportData .= '<' . $tableHead . '>' . $crlf;
while ( ( $row = mysql_fetch_row( $sqlResult ) ) ) {
$this->exportData .= ' <' . $table . '>' . $crlf;
for ($i = 0; $i < $this->fields; $i++) {
if (isset($row[$i]) && !is_null($row[$i])) {
$this->exportData .= ' <' . $this->columns[$i] . '>' . htmlspecialchars($row[$i])
. '</' . $this->columns[$i] . '>' . $crlf;
}
}
$this->exportData .= ' </' . $table . '>' . $crlf;
}
$this->exportData .= '</' . $tableHead . '>';
return true;
}
/**
* Export Data to CSV
*
* @param resource $sqlResult The MySQL Result
*
* @return boolean True
*/
private function exportToCsv( $filePfad = NULL, $sqlResult, $delimiter = ',', $enclosure = '"', $coloumnName = FALSE ) {
// Scheint noch ein Fehler drin zu sein wenn
// man es mit Excel importiert
@mysql_data_seek( $sqlResult, 0 );
if ( $filePfad == NULL )
$filePfad = dirname(__FILE__) . '/temp' . time() . '.csv';
$fp = fopen($filePfad, 'w');
if ( $coloumnName == TRUE )
fputcsv ( $fp , $this->columns, $delimiter, $enclosure );
while ( ( $row = mysql_fetch_row( $sqlResult ) ) ) {
fputcsv ( $fp , $row, $delimiter, $enclosure );
}
fclose($fp);
$this->saveTempFile($filePfad);
return true;
}
private function saveTempFile($filePfad) {
// Load Temp file
$fp = fopen($filePfad, 'r');
$this->exportData = fread( $fp, filesize( $filePfad ) );
fclose($fp);
@unlink ( $filePfad );
}
function __destruct() {
}
}
?>
|
Download
exportModul.zip

|
|
|
|
|


|