#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(), чтобы узнать, сколько строк было установлено / обновлено / удалено.