我正在尝试执行一个C程序,使用mysql C API,使用更新查询连接到mysql,我没有得到任何编译或链接错误,但是数据库表中没有更新行。
当我运行此代码时,我在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)
estatus varchar(10)
我无法弄清楚为什么状态没有在mysql表中更新。它是不匹配的数据类型,还是值没有正确绑定到sqlquery?
任何线索?感谢。
答案 0 :(得分:1)
您可以在此处找到:Writing into mysql database from a single board computer using c有关如何使用MYSQL C API
执行查询的完整示例,如果您仍然遇到问题,请发布整个代码。
答案 1 :(得分:0)
为什么要尝试使用“where empID =?”。如果您希望它为每个员工运行,只需省略where子句。如果是针对特定员工,那么他的身份证应该在那里。
可能会有更多问题,但这是我找到的第一个问题。
您可以通过尝试在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;
}