mysql_error in string schreiben



  • Hi!

    ich möchte gerne die Fehlermeldung die mir mysql_error ausgibt in einen string schreiben (kein cstring).

    welches format gibt mir denn mysql_error zurück?

    mysql_errno z.b. sollte 1146 ausgeben aber im string steht nur ein "z". bei mysql_error sinds dann schon Zeichen wie jh@... 😉 )

    auf der mysql reference finde ich keine info zu dem datentyp der mysql_error ausgibt (mysql_errno war hier nur ein beispiel..)

    danke!





  • genau.. aber ein string kann das ja nicht sein.. oder wieso kommen dann diese zeichen mit rein? bei ner normalen ausgabe mit cout sieht ja noch alles ok aus..

    und ich mach nicht mehr als fehlermeldung aneinanderzufügen

    errmsg += "Error: Insert tabl1 Query failed! >> Code: ";
    errmsg += mysql_error(&mysql);
    


  • mhh lag nicht daran. hab den fehler gefunden 😉

    ich durchlaufe eine schleife (für jeden server einmal) und hab hier die ganze zeit die variable server[i] genutzt...

    und die variable hat mir am schluss des scriptes mist gespeichert.. wieso weil ich zwischendurch nochmal i anderweitig genutzt hab 😉



  • es ist ein const char*, wie schon in der doku steht.
    std::string hat aber einen konstruktor, der einen const char* erwartet:

    std::string x = mysql_error(&bla);
    

    geht also anstandslos...
    eigtl hat std::basic_string auch einen operator +=, der einen zeiger erwartet,...
    ich wüsste also nicht, wieso das nicht gehen sollte - aber dann musst du eben:

    msg += std::string(mysql_error(&bla));
    

    schreiben...
    (ich gehe mal davon aus, dass msg vom typ std::string ist!)

    bb



  • die msg ist vom typ std::string, korrekt. aber siehe oben.. war einfach nur ein blöder fehler meinerseits 🙂

    gibts denn zu dieser schreibe weise auch eine alternative??

    errormsg += "Error: 404 >> ";
    errormsg += filename;
    errormsg += " not found! -- ";
    


  • taurus schrieb:

    die msg ist vom typ std::string, korrekt. aber siehe oben.. war einfach nur ein blöder fehler meinerseits 🙂

    gibts denn zu dieser schreibe weise auch eine alternative??

    errormsg += "Error: 404 >> ";
    errormsg += filename;
    errormsg += " not found! -- ";
    

    es geht so (hässlich):
    errormsg += "asd" + std::string(filename) + "asd";
    oder (vermutlich langsamer) mithilfe eines stringstreams und dem operator <<

    bb



  • mhh dann bleib ich doch bei der variante wie bisher.

    dank dir!



  • taurus schrieb:

    mhh dann bleib ich doch bei der variante wie bisher.

    dank dir!

    kein problem - ach so: der performance-unterschied sollte auch nicht unendlich groß sein - also ist nicht spürbar, allenfalls messbar - wenn der code dadurch übersichtlicher wird, ist es gar keine so schlechte idee - besonders ab dann, wenn man zahlen mit speichern möchte würde ich die stringstream-variante bevorzugen

    bb



  • mhh bei dem riesigen query das ich hier hab viell gar keine schlechte idee...

    ich vermisse das von php wo man schön den anfang und das ende des query definieren konnte und zwischendrin einfach schön formatieren ;-))

    mit dieser stream geschichte muss ich mich erst einlesen, habs nur mal überflogen und das war für mich aufs erste zu kompliziert 🙂

    aber danke dem tipp, werd ich mir mal näher anschaun



  • taurus schrieb:

    mhh bei dem riesigen query das ich hier hab viell gar keine schlechte idee...

    ich vermisse das von php wo man schön den anfang und das ende des query definieren konnte und zwischendrin einfach schön formatieren ;-))

    mit dieser stream geschichte muss ich mich erst einlesen, habs nur mal überflogen und das war für mich aufs erste zu kompliziert 🙂

    aber danke dem tipp, werd ich mir mal näher anschaun

    Ist einfach:

    std::stringstream ss;
    ss << "Fehlermeldung: " << error_string << ", Fehlernummer: " << nummer;
    cout << ss.str();
    

    lg



  • mhh, sieht gut aus 😉

    wobei ich mein sql query trotzdem nicht so übersichtlich formatieren kann ://
    ich darf ja nicht einfach einen zeilenumbruch z mit einbauen ://

    sowas sollte ja nicht funktionieren:

    std::stringstream ss;
    ss << "Fehlermeldung: " << 
    error_string << ", Fehlernummer: " << nummer;
    cout << ss.str();
    


  • taurus schrieb:

    mhh, sieht gut aus 😉

    wobei ich mein sql query trotzdem nicht so übersichtlich formatieren kann ://
    ich darf ja nicht einfach einen zeilenumbruch z mit einbauen ://

    sowas sollte ja nicht funktionieren:

    std::stringstream ss;
    ss << "Fehlermeldung: " << 
    error_string << ", Fehlernummer: " << nummer;
    cout << ss.str();
    

    Wieso sollte das nicht funktionieren? Das funktioniert so.
    lg



  • std::stringstream ss;
    ss << "Fehlermeldung: 
    INSERT INTO t_data (var1,var2)
       SELECT (var1,var2)
       FROM t_data,
           t_log
       WHERE ..." << error_string << ", Fehlernummer: " << nummer;
    cout << ss.str();
    

    aber sowas doch nicht?? das wäre nämlich genau was ich bräuchte... mach das ganze übersichtlicher 🙂



  • taurus schrieb:

    std::stringstream ss;
    ss << "Fehlermeldung: 
    INSERT INTO t_data (var1,var2)
       SELECT (var1,var2)
       FROM t_data,
           t_log
       WHERE ..." << error_string << ", Fehlernummer: " << nummer;
    cout << ss.str();
    

    aber sowas doch nicht?? das wäre nämlich genau was ich bräuchte... mach das ganze übersichtlicher 🙂

    ss << "Fehlermeldung: "
       << "INSERT INTO t_data (var1,var2)"
       << "SELECT (var1,var)"
       << "FROM t_data, t_log "
       << "WHERE.." << error_string << ", FEhlernummer:" << nummer;
    

    So geht das...



  • std::stringstream ss;
    ss << 
    "Fehlermeldung:\n"
    "INSERT INTO t_data (var1,var2)\n"
    "   SELECT (var1,var2)\n"
    "   FROM t_data,\n"
    "       t_log\n"
    "   WHERE ..." << error_string << ", Fehlernummer: " << nummer << '\n';
    cout << ss.str();
    

    So geht das...


  • Administrator

    L33TF4N schrieb:

    ss << "Fehlermeldung: "
       << "INSERT INTO t_data (var1,var2)"
       << "SELECT (var1,var)"
       << "FROM t_data, t_log "
       << "WHERE.." << error_string << ", FEhlernummer:" << nummer;
    

    So geht das...

    Es geht sogar so:

    ss << "Fehlermeldung: "
          "INSERT INTO t_data (var1,var2)"
          "SELECT (var1,var)"
          "FROM t_data, t_log "
          "WHERE.." << error_string << ", Fehlernummer:" << nummer;
    

    😉



  • ss << "Fehlermeldung: "
          "INSERT INTO t_data (var1,var2)"
          "SELECT (var1,var)"
          "FROM t_data, t_log "
          "WHERE.." 
    << error_string << ", Fehlernummer:" << nummer;
    

    oder so? ja bestens so muss das aussehen 🙂

    danke, danke , danke !!


Log in to reply