Wert aus datenbank Prüfen

  • C++

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von 3daycliff.

    Wert aus datenbank Prüfen

    Hallo zusammen,

    Ich habe folgenden Code um eine spalte der Mysql Datenbank auszulesen:

    C-Quellcode

    1. #include <stdio.h>
    2. #include <mysql.h>
    3. int main(char **args) {
    4. MYSQL_RES *result;
    5. MYSQL_ROW row;
    6. MYSQL *connection, mysql;
    7. int state;
    8. /* connect to the MySQL database at localhost */
    9. mysql_init(&mysql);
    10. connection = mysql_real_connect(&mysql,"localhost", "test", "test",
    11. "test", 0, 0, 0);
    12. /* check for a connection error */
    13. if (connection == NULL) {
    14. /* print the error message */
    15. printf(mysql_error(&mysql));
    16. return 1;
    17. }
    18. state = mysql_query(connection,
    19. "SELECT auto_ein FROM lampen");
    20. if (state != 0) {
    21. printf(mysql_error(connection));
    22. return 1;
    23. }
    24. /* must call mysql_store_result( ) before you can issue
    25. any other query calls */
    26. result = mysql_store_result(connection);
    27. printf("Rows: %d\n", mysql_num_rows(result));
    28. /* process each row in the result set */
    29. while ( ( row = mysql_fetch_row(result)) != NULL ) {
    30. printf(row[0]);
    31. if(row[0]=="12") {
    32. printf("fuenf\n");
    33. }
    34. }
    35. /* free the result set */
    36. mysql_free_result(result);
    37. /* close the connection */
    38. mysql_close(connection);
    39. printf("Done.\n");
    40. }


    Nun würde ich gerne die Werte Prüfen und weiterverarbeiten aber der Teil hier:

    C-Quellcode

    1. if(row[0]=="12") {
    2. printf("fuenf\n");
    3. }
    funktioniert leider nicht...
    Kann mir jemand helfen
    Was heißt: "Es funktioniert nicht"? - Außerdem sollte ​while (row = mysql_fetch_row(result)) in der Schleife ausreichen. ;)

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Du benutzt mysql_store_result, sodass die Anzahl, die mysql_num_rows ermittelt, eigentlich direkt korrekt sein müsste.
    Was Du mal versuchen kannst, ist das Ergebnis von mysql_num_rows nochmal explizit mit static_cast<> zu einem int zu casten und dann auszugeben. Übrigens ist printf C, in C++ ist die entsprechende Funktion std::cout.

    if (connection == NULL) => if(!connection)

    Also in der Iteration gibt es ja die 12 aus, nur die Abfrage haut nicht hin. Was sagt denn der Debugger, was da in row[0] steht? Ich tippe mal auf ein Problem mit Nullterminierung.
    In C++ würde ich btw auch auf MySQL++ zurückgreifen.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @petaod Nein, MYSQL_ROW ist ein Array aus nullterminierten Strings (typedef char **MYSQL_ROW). Das geht daher nicht. ^^
    Daher kam auch meine Vermutung, dass mit der Nullterminierung was nicht stimmt und die Abfrage deshalb fehlschlägt.

    Edit: @schnibli Ich denke mittlerweile ziemlich sicher, dass es daran liegt. Habe das gerade mal getestet und das Verhalten entspricht genau dem in Deinem Code. Natürlich wird das ganze ohne den Nullterminierungs-Character ausgegeben, aber der Vegleich schlägt fehl:




    Edit2: Huch, ich habe vergessen delete test[0]; aufzurufen. Aber es war nur ein Test mit einem Element, also nicht zu tragisch.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Trade“ () aus folgendem Grund: Anhänge gefixt

    Hab es jetzt mal noch so Probiert:

    C-Quellcode

    1. while ((row = mysql_fetch_row(res)) !=NULL)
    2. printf("%s\n", row[0]);
    3. if(row[0] && strcmp(row[0], "test") == 0){
    4. printf("hallo");
    5. }
    jedoch auch ohne erfolg
    102test
    test
    test
    test
    12
    test
    test