Я не могу использовать c API для MySQL подготовленного заявления - PullRequest
1 голос
/ 01 марта 2020

Я пишу пробную версию соединения 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 !!!

...