Integer in String hinterlegen Problem mit "\x"



  • Hallo C++er,

    ich habe folgendes Problem:

    Möchte gerne eine MySQL Datenbank beschreiben und bekomme beim zusammensetzten des SQL-Befehls einen Konflikt.

    Ich schreibe mir die Befehle einzeln in String Variablen zusammen mit "+="
    jedoch wenn ich nun beim schreiben eine Zahl also einen Integer mit "+=" hinterlegen möchte dann bekomme ich ein "\x" vorgeschoben.

    Bsp.:

    String SQL_BEF;
    int a=12;

    SQL_BEF ="BEISPIELTEXT_";
    SQL_BEF += a;

    dann steht in SQL_BEF: "BEISPEILTEXT_\x12"

    Das \x würde ich gerne entsorgen. 😡

    sprich brauche SQL_BEF: "BEISPEILTEXT_12"

    Kann mir einer sagen wie ich dieses Problem beseitige?



  • Was ist/woher kommt der Datentyp "String"?



  • Ganz einfach: lass es. Lerne mit prepared statements umzugehen und verwende Platzhalter. Einen SQL zusammen zu bauen ist zu fehleranfällig. Stichwort: SQL-injection.

    Ausserdem gibt es in C++ keinen Datentyp "String".



  • #include <string>

    und dann hat man den String zur Verfügung

    aber vielen dank für die überaus hilfreichen Antworten ....



  • Nein dann hat man string (mit kleinem s). Das ist ein Unterschied.



  • sebi707 schrieb:

    Nein dann hat man string (mit kleinem s). Das ist ein Unterschied.

    Wenn wir schon korrigieren, dann richtig: Dann hat man std::string 😃



  • Wo jetzt klar ist, dass du einen std::string benutzt kann man dir wenigstens erklären wo dein Fehler lag. Du verwendest den operator+= mit einem int, es gibt aber keinen operator+= für ints. Es gibt aber einen für char und dieser wird ausgewählt. Dein int wird dann als ein ASCII Zeichen interpretiert und angehängt. Du kannst dein Programm ja nochmal mit a = 65 starten, dann müsste ein 'A' angehängt werden. Wenn du Zahlen an strings anhängen willst geht das so:

    std::string SQL_BEF;
    int a=12;
    
    SQL_BEF ="BEISPIELTEXT_";
    SQL_BEF += std::to_string(a);
    

    Für SQL sind prepared statements aber tatsächlich die bessere Lösung.


Log in to reply