Mailinglisten-Archive |
OT: Ich habe es schon in der mysql++ Liste probiert, aber da ist irgendwie "tote Hose"... Um binaere Daten per "INSERT" an eine Datenbank (hier MySQL) zu senden, muss ich in einem String, in dem diese Daten gespeichert sind, bestimmte Zeichen maskieren, bzw. escapen (sagt mir, wenn ich falsche Begriffe benutze.) bei den Zeichen " \ ' gibts keine Probleme, nur mit dem NUL-Zeichen (Hex-Wert 00, bzw. '\0') gibt's Probleme. Der Hex-Wert 00 soll in \0 umgesetzt werden. So was aehnliches kennen die meisten von PHP, dort heisst die Funktion "addslashes()". Auch die mysql++ API hat so eine Funktion, die kann ich aber leider nicht so einfach verwenden, weil ich eine vereinfachte API zum Zugriff aud die Datenbank verwende. Hier meine Funktion: bool DatenbankMySQL::esc_blob(std::string& toEscape) { std::string toReturn; // Zeichen, die Maskiert werden sollen: \ ' ; " std::string separators="\\'\;\""; // Null-Char kann in Binaries vorkommen! separators += "\0"; for ( int i=0; i < toEscape.length(); ++i) { if ( find(separators.begin(), separators.end(), toEscape[i]) != separators.end() ) { toReturn += '\\'; } toReturn += toEscape[i]; } toEscape=toReturn; // -> toReturn ist Referenz auf toEscape! return true; } Der Aufruf erfolgt einfach ueber bool ok = DatenbankMySQL::esc_blob(str_blob); (Funktion ist in Klasse statisch deklariert) Zusaetzlich weiss ich nicht, ob/wie man das ganze noch effizienter vom Speicherverbrauch her implementieren koennte, da auch sehr grosse Files (100MB) damit maskiert werden sollen. -- Franz Alt, franz.alt_(at)_pfaffenhofen.de --- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive