結構體:
typedef struct {
int id;
char name[16];
char sex;
char birth[12];
char dept[16];
int salary;
} Member;
#include <mysql.h>
#include <stdio.h>
#include <string.h>
int insert_member(MYSQL *conn, const Member *m)
{
MYSQL_STMT *stmt = mysql_stmt_init(conn);
if (!stmt) return -1;
const char *sql = "INSERT INTO members (name, sex, birth, dept, salary) VALUES (?, ?, ?, ?, ?)";
if (mysql_stmt_prepare(stmt, sql, strlen(sql))) {
fprintf(stderr, "Prepare failed: %s\n", mysql_stmt_error(stmt));
return -1;
}
MYSQL_BIND bind[5] = {0};
// name
bind[0].buffer_type = MYSQL_TYPE_STRING;
bind[0].buffer = (char *)m->name;
bind[0].buffer_length = strlen(m->name);
// sex
bind[1].buffer_type = MYSQL_TYPE_TINY;
bind[1].buffer = (char *)&m->sex;
// birth
bind[2].buffer_type = MYSQL_TYPE_STRING;
bind[2].buffer = (char *)m->birth;
bind[2].buffer_length = strlen(m->birth);
// dept
bind[3].buffer_type = MYSQL_TYPE_STRING;
bind[3].buffer = (char *)m->dept;
bind[3].buffer_length = strlen(m->dept);
// salary
bind[4].buffer_type = MYSQL_TYPE_LONG;
bind[4].buffer = (void *)&m->salary;
if (mysql_stmt_bind_param(stmt, bind)) {
fprintf(stderr, "Bind failed: %s\n", mysql_stmt_error(stmt));
return -1;
}
if (mysql_stmt_execute(stmt)) {
fprintf(stderr, "Execute failed: %s\n", mysql_stmt_error(stmt));
return -1;
}
mysql_stmt_close(stmt);
return 0;
}
MYSQL_TYPE_*,避免格式字串錯誤。\0 結尾,長度不含結尾符。MYSQL_TYPE_LONG/LONGLONG。-lmysqlclient (Linux) / libmysql.lib (Windows)。