首页 > 解决方案 > 我不能将 c api 用于 MySQL 准备好的语句

问题描述

我正在编写一个将 MySQL 与 C 连接的 hello-world 级别的尝试。我按照 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,它仍然无法正常工作......

请帮我把它弄好。谢谢!!!

标签: mysqlcapiprepared-statement

解决方案


推荐阅读