Использование MySQL C API — проверка успешности вставки строк с использованием подготовленных инструкций

#mysql #c #prepared-statement

#mysql #c #подготовленный оператор

Вопрос:

Я начинаю изучать, как использовать MySQL C API, и сталкивался с подготовленными инструкциями. Я не использовал их раньше на других языках, поэтому для меня все это ново.

Я посмотрел онлайн и выяснил, как использовать подготовленные инструкции для извлечения данных из SELECT запроса, и теперь я пытаюсь получить INSERT некоторые данные и выяснить, было ли это успешным. Я получил первую часть в значительной степени, но мой вопрос: как я могу узнать, был ли мой INSERT успешно выполнен?

Я прочитал некоторые документы MySQL для C API / подготовленных операторов — и нашел Google / search по SO. Все, что я смог найти, — это SELECT подготовленные инструкции и ничего больше.

Я приложил некоторый созданный мной код, который успешно вставляет строку.

 #include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#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 handlen");
        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 statementn");
        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 = amp;l;

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

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

    mysql_stmt_free_result(stmt);
    mysql_stmt_close(stmt);

    return sID;
}
 

Ответ №1:

У вас уже есть код в

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

Если это не удается, вы не вставили ни одной строки. Документы содержат полный пример

Вы также можете использовать mysql_stmt_affected_rows() после успешного mysql_stmt_execute(), чтобы узнать, сколько строк было установлено / обновлено / удалено.