Hallo,
Da SELECT INTO OUTFILE (MySQL) ja leider nur serverseitig läuft, ich diese Art "Dump" aber auf dem Client-Host brauche hab ich mir kurz was nachgebaut.
Ein simples implode() oder fputcsv() "geht nicht", zumindest kommt nicht das Format bei raus, das SELECT INTO OUTFILE bringen würde, daher der ganze Aufwand.
Speziell der Backslash am Ende einer Zeile, wenn es mehrzeilige Werte sind, fehlt und es wird nicht immer gequotet, was ich aber gerne hätte.
Da ich nur äußerst selten mit so einem Export zu tun habe bin ich mir nun nicht sicher, ob ich was übersehen habe.
Sieht da jemand Probleme oder irgendwas nicht berücksichtigt?
Danke im Voraus & schönes WE!
Da SELECT INTO OUTFILE (MySQL) ja leider nur serverseitig läuft, ich diese Art "Dump" aber auf dem Client-Host brauche hab ich mir kurz was nachgebaut.
Ein simples implode() oder fputcsv() "geht nicht", zumindest kommt nicht das Format bei raus, das SELECT INTO OUTFILE bringen würde, daher der ganze Aufwand.
Speziell der Backslash am Ende einer Zeile, wenn es mehrzeilige Werte sind, fehlt und es wird nicht immer gequotet, was ich aber gerne hätte.
Da ich nur äußerst selten mit so einem Export zu tun habe bin ich mir nun nicht sicher, ob ich was übersehen habe.
PHP-Code:
// SELECT * FROM `table`
while($row = $dbh->fetch_array()) {
$buffer = implodeForCSV($row);
// write buffer to file
}
function implodeForCSV(Array $data) {
$string = NULL;
foreach($data as $value) {
if(is_null($value)) {
$string .= (strlen($string) ? ';' : '').'\\N';
}
elseif(is_string($value)) {
$string .= (strlen($string) ? ';' : '').'"'.preg_replace('/(\r\n|\n\r|\r|\n)/', '\\\${1}', addslashes($value)).'"';
}
else {
$string .= (strlen($string) ? ';' : '').'""';
}
}
return strlen($string) ? $string."\n" : NULL;
}
Danke im Voraus & schönes WE!
Kommentar