MySQL C API пайдалану - дайындалған мәлімдемелерді қолдану арқылы жолдарды кірістіруді тексеріңіз

Мен MySQL C API-ды қалай пайдалану керектігін үйреніп, дайындалған мәлімдемелермен кездестім. Мен бұны басқа тілдерде қолданған емеспін, сондықтан бұл маған жаңа.

I've looked online and I've figured out how to use prepared statements to retrieve data from a SELECT query, and now what I'm trying to do is to INSERT some data and find out if it was successful. I've got the first part pretty much down, but my question is: how can I find out if my INSERT was successfully executed?

Мен C API/дайындалған мәлімдемелер үшін кейбір MySQL құжаттары арқылы оқыдым және Google-де/SO-де іздеу жасадым. Мен мысалдардың бәрін SELECT дайындалған мәлімдемелер мен басқа ештеңе таба алмадым.

Мен өзім жасаған кодты тіркеді, ол жолды сәтті енгізеді.

#include 
#include 
#include 
#include 
#include "session.h"

char *createSessionId(MYSQL *dbc) {
    const char *sPS2 = "INSERT INTO `sessions` (`SessionID`) VALUES (?)";
    char *sID;
    MYSQL_STMT *stmt;
    MYSQL_BIND param[1];
    unsigned long l = 32;

   //Allocate a statement handle
    stmt = mysql_stmt_init(dbc);
    if(stmt == NULL) {
        printf("Unable to create new session: Could not init statement handle\n");
        return NULL;
    }

   //Init
    memset(param, 0, sizeof(param));
    sID = malloc(33);
    sprintf(sID, "01234567890123456789012345678901");
    if(mysql_stmt_prepare(stmt, sPS2, strlen(sPS2)) != 0) {
        printf("Unable to create new session: Could not prepare statement\n");
        return NULL;
    }

   //Initialise param structure
    param[0].buffer_type = MYSQL_TYPE_VARCHAR;
    param[0].buffer = sID;
    param[0].is_unsigned = 0;
    param[0].is_null = 0;
    param[0].length = &l;

   //Bind param structure to statement
    if(mysql_stmt_bind_param(stmt, param) != 0) {
        printf("Unable to create new session: Could not bind parameters\n");
        return NULL;
    }

   //Execute prepared statement
    if(mysql_stmt_execute(stmt) != 0) {
        printf("Unable to create new session: Could not execute statement\n");
        return NULL;
    }

    mysql_stmt_free_result(stmt);
    mysql_stmt_close(stmt);

    return sID;
}
1

1 жауаптар

Сізде код бар

if(mysql_stmt_execute(stmt) != 0) {
        printf("Unable to create new session: Could not execute statement\n");
        return NULL;
}

If that fails, you didn't insert any rows. The docs contain a full example

mysql_stmt_affected_rows () функциясын пайдалана аласыз сәтті аяқталғаннан кейін mysql_stmt_execute() жолдың қанша рет жаңартылғаны/жойылғанын білу үшін.

2
қосылды