- 论坛徽章:
- 11
|
本帖最后由 zylthinking 于 2017-09-15 20:28 编辑
第一次使用 mysql c库 + mysql 存储过程, 碰到了一系列问题;
比如临时表只能打开一次什么的, 恶心的不行, 但总算是已知问题, 绕过去了;
但最后又碰到一问题, 如下 sync_items 是一个返回表的存储过程, 也就是最后一个语句是 select
问题来了, 根据调用的参数不同, 如果返回的不是空表, 则一切正常, 如果一旦是空表, 居然函数不返回了
我就日了, 不知道是 mysql 就是这么烂还是调用的哪里不对?
- const char sql[] = "call sync_items(?)";
- MYSQL* mysql = conn_get();
- if (mysql == NULL) {
- return -1;
- }
- MYSQL_STMT* stmt = mysql_stmt_init(mysql);
- if (stmt == NULL) {
- conn_put(mysql, 0);
- return -1;
- }
- int n = mysql_stmt_prepare(stmt, sql, sizeof(sql) - 1);
- check(n);
- MYSQL_BIND params[6] = {0};
- params[0].buffer_type = MYSQL_TYPE_STRING;
- params[0].buffer = (void *) email;
- params[0].buffer_length = strlen(email);
- n = mysql_stmt_bind_param(stmt, ¶ms[0]);
- check(n);
- enum enum_cursor_type cursor = CURSOR_TYPE_READ_ONLY;
- n = mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, &cursor);
- check(n);
- //--------------------------------------------------------------------------------这一行, 如果返回的不是空表, 则没问题, 一旦是空表, 则再也不返回了
- n = mysql_stmt_execute(stmt);
- check(n);
复制代码
|
|