Я пишу пробную версию соединения MySQL с C. Я следовал за каждым шагом в MySQL Документации, и он все еще не работает. Это действительно расстраивает.
Я пытаюсь вставить вещи в таблицу.
Вставить оператор:
insert into students_tbl values('?', ?, '?', '?');
Структура таблицы:
| students_tbl | CREATE TABLE `students_tbl` (
`name` varchar(40) DEFAULT NULL,
`sal` int(11) DEFAULT NULL,
`gender` varchar(10) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
C код:
MYSQL_STMT *stmt = mysql_stmt_init(mysql);
char *statement = "insert into students_tbl values('?', ?, '?', '?');";
mysql_stmt_prepare(stmt, statement, strlen(statement));
MYSQL_BIND bind[4];
memset(bind, 0, sizeof(MYSQL_BIND) * 4);
bind[0].buffer_type = MYSQL_TYPE_STRING;
bind[0].buffer = (void *) "nana";
bind[0].buffer_length = 4;
bind[0].is_null = 0;
bind[0].length = nullptr;
int sal = 1234;
bind[1].buffer_type = MYSQL_TYPE_LONG;
bind[1].buffer = &sal;
bind[1].buffer_length = sizeof(int);
bind[1].is_null = 0;
bind[1].length = nullptr;
bind[2].buffer_type = MYSQL_TYPE_STRING;
bind[2].buffer = (void *) "female";
bind[2].buffer_length = 5;
bind[2].is_null = 0;
bind[2].length = nullptr;
bind[3].buffer_type = MYSQL_TYPE_STRING;
bind[3].buffer = (void *) "hahaha@hahaha.com";
bind[3].buffer_length = 17;
bind[3].is_null = 0;
bind[3].length = nullptr;
mysql_stmt_bind_param(stmt, bind);
printf("%s", mysql_stmt_error(stmt));
mysql_stmt_execute(stmt);
printf("%s", mysql_stmt_error(stmt));
Я пытался что-то напечатать в соответствии с Документацией, но ничего не получил.
Я добавил это, чтобы проверить, получает ли mysql номер ? справа:
int param_count = mysql_stmt_param_count(stmt);
Значение param_count равно 0, что удивительно ... Я не знаю, почему это может произойти. Я проверил набор символов таблицы и переключил его на utf8, и он все равно не будет работать ...
Пожалуйста, помогите мне понять это правильно. Thx !!!