phpbar.de logo

Mailinglisten-Archive

Escapen von BLOB-Feldern mit C++

Escapen von BLOB-Feldern mit C++

Franz Alt mysql-de_(at)_lists.bttr.org
Thu, 19 Sep 2002 16:54:45 +0200


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