mysql & c++ funktion nachvollziehen



  • hallo zusammen...
    ich hab' eine frage.
    unzwar kann ich diese funktion nicht nachvollziehen.

    int Authorized(char* username, char* password) 
    {
    	mysqlpp::StoreQueryResult res = 
    		db.Query("select * from users where username='%s' and password='%s'", username, password).store();
    	return res.num_rows() == 0 ? 0 : atoi(res[0][0]);
    }
    

    ich kann diese funktion nicht in ein beispiel einbauen und kompilieren da mysql bei mir nicht funktioniert, aber ich möchte diese funktion umschreiben allerdings versteh ich diese funktion nicht und da ich den return-wert nicht ausgeben kann, kann ich es auch nicht nachvollziehen... 😞
    bitte um hilfe



  • Und was genau nicht?
    Es wird von der DB etwas abgefragt und das Ergebnis in ein Resultset gesteckt. IN diesem sind dann die Daten der Abfrage.
    num_rows liefert die Anzahl Datensätze im Result.



  • ja soweit hab ich es auch verstanden aber was is denn der return wert? was kommt

    atoi(res[0][0])
    

    denn dabei raus? kann vielleicht jemand ein beispiel machen? 😕 ich glaub ich hab im moment ein brett vor'm kopf



  • Aber google kannst Du alleine anwerfen oder?
    http://tangentsoft.net/mysql++/doc/html/refman/classmysqlpp_1_1StoreQueryResult.html

    Kenne zwar die Tabelle nicht aber
    atoi(res[0][0]) // erster Datensatz erste Spalte

    vermutlich eine UserID welche als INT (atoi) zurückgegeben wird.



  • Ich habs verstanden 😃 danke für die hilfe... ja gegoogelt hab ich schonmal, ich hatte sogar das schema mal offen (oder so ein ähnliches) allerdings konnte ich nix damit anfangen. Wie ich mich über meine Dummheit ärger 🙄
    Nochmal danke 👍



  • BTW: der Code ist "böse", da empfindlich auf Spalten-Verschieben (Umordnen).
    Anders gesagt: "*" in der "Spaltenliste" für SELECT ist immer doof. Lieber die Spalten explizit angeben.
    Hat auch den zusätzlichen Vorteil, dass man nicht doof rumraten muss, was für ein Feld da als erstes stehen könnte. Und dass nicht mehr Daten transferiert werden als nötig ist. Wobei das natürlich in dem Fall egal ist, da die Tabelle ja hoffentlich nicht so irre breit ist, dass selbst eine Zeile weh tut.

    (Mir ist klar dass der Code nicht von dir ist, aber da du danach fragst was diese Funktion macht, denke ich, wird dich vielleicht auch interessieren, was sie "falsch" macht.)

    und da ich den return-wert nicht ausgeben kann

    Wieso nicht? Ein TRACE() bzw. printf() wirkt da Wunder. Oder, falls Server Applikation: einfach ins Logfile schreiben.



  • Ich denke das dürfte daran scheitern das sein MySql nicht läuft.
    Da hilft alles printen nichts



  • Ich hätt dazu auch ne frage...
    Sind diese Funktionen aus iwelchen standartheadern?
    Oder muss ich dafür diverse dlls oder libs oder was es sonnst noch so gibt einbinden?



  • rofl
    epic fail auf meiner seite 😃


Anmelden zum Antworten