7

我正在尝试使用 mysql C API 执行 C 程序,使用更新查询连接到 mysql,但没有收到任何编译或链接错误,但 db 表中的行没有得到更新。

当我运行此代码时,我在 emp 中更新了空值。状态字段

#define STRING_SIZE 256

char* eStatus,myeStatus;

int myempid,empid;


int i;
for(i = 0; i < 5 ; i++){
const char* sqlQuery = "update employee_info set estatus = ? where empID = ?";
    if (mysql_stmt_prepare(stmt, sqlQuery, strlen(sqlQuery))) {
            fprintf(stderr, " mysql_stmt_prepare(), update failed\n");
            fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
            return -1;
          }

memset(param, 0, sizeof(param)); /* zero the structures */

if (info.state == 2)

      eStatus = "present";

else
      eStatus = "absent";

empid = i;
// Init param structure
            // Select
            param[0].buffer_type = MYSQL_TYPE_STRING;
            param[0].buffer = (void *) &eStatus;
            param[0].buffer_length = STRING_SIZE;
            param[0].is_null = 0;
            param[0].length = &str_length;

            param[1].buffer_type = MYSQL_TYPE_SHORT;
            param[1].buffer = (void *) &myempID;
            param[1].buffer_length = STRING_SIZE;

            param[1].is_null = 0;
            param[1].length = 0;

        myeStatus = eStatus;
    myempid = empid;
               if (mysql_stmt_bind_param(stmt, param) != 0) {
            fprintf(stderr, " mysql_stmt_bind_param() failed\n");
            fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
            return -1;
        }
               /* Execute the statement */
        if (mysql_stmt_execute(stmt)) {
            fprintf(stderr, " mysql_stmt_execute(), failed\n");
            fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
                return -1;
        }

} // end of for loop

mysql中的表模式

empid INT(11)

状态 varchar(10)

我无法弄清楚为什么状态没有在 mysql 表中更新。是数据类型不匹配,还是值未正确绑定到 sqlquery?
有什么线索吗?谢谢。

4

2 回答 2

1

您可以在这里找到:使用c从单板计算机写入mysql数据库的完整示例,了解如何使用MYSQL C API执行查询,如果仍有问题,请发布整个代码。

于 2012-09-05T22:02:05.223 回答
0

您为什么要尝试使用“where empID =?”。如果您希望它为每个员工运行,只需省略 where 子句。如果是针对特定员工,那么他的 id 应该在那里。

可能还有更多问题,但这是我发现的第一个问题。

您可以通过尝试在 mysql 命令行提示符下执行相同的查询来验证。

编辑:我也没有看到任何正在建立的数据库连接以及与之相关的任何信息。就像是

MYSQL *conn = mysql_init(NULL);

*conn = mysql_real_connect(*conn, DB_HOST, DB_USER, DB_PASS, DB_NAME, 0, NULL, flags);

if (*conn != NULL)
{
    printf("Connection Successfull\n");
    status = 0;
}
于 2012-09-05T18:52:06.730 回答