mysql - 我不能将 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,它仍然无法正常工作......
请帮我把它弄好。谢谢!!!
解决方案
推荐阅读
- php - 无法向机器人添加意图
- c++ - 将向量的 size() 转换为 int 不起作用
- reactjs - 如何将 gatsby-plugin-google-gtag 与 Gatsby.js 一起使用?
- r - K-means 聚类的内存问题
- mysql - 如何检查 mysql 查询中的 2 个唯一字段
- ios - 从集合视图控制器调用时集合视图标题中的 UIButton 不起作用,如何解决此问题?
- java - 在本地禁用领事配置
- java - 如何在intellij中纠正java多行中单个语句的缩进
- mysql - Zend Framework 2 Db getColumns
- javascript - Javascript:类的第二个实例覆盖第一个