我需要在mysql中重新填充一些表格,我正在使用C API。该表有2列标题为“VARIABLE”和“VALUE”,4行包含4个变量的名称和值。
我可以通过代码
重新填充任何值,例如VAR1的值if(mysql_query(conn, "REPLACE INTO TAULA_DADES SET VARIABLE='VAR1',VALOR=3")){
finish_with_error(conn);
}
但是,我不知道如何在字段中输入C变量的值,例如:
int a;
答案 0 :(得分:0)
这样的事情应该有效(没有经过测试,只是可能方法的一个例子):
MYSQL_STMT *stmt = mysql_stmt_init(conn);
char stmt_text[] = "REPLACE INTO TAULA_DADES SET VARIABLE=?,VALOR=?";
mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
/* Bind the data for the 2 parameters */
MYSQL_BIND bind[2];
memset(bind, 0, sizeof(bind));
/* First parameter */
char var1[16] = "VAR1";
unsigned long var1_len = strlen(var1);
bind[0].buffer_type = MYSQL_TYPE_STRING;
bind[0].buffer = var1;
bind[0].buffer_length = 16;
bind[0].is_null = 0;
bind[0].length = &var1_len;
/* Second parameter */
int a = 123;
bind[1].buffer_type = MYSQL_TYPE_LONG;
bind[1].buffer = (char *)&a;
bind[1].is_null = 0;
bind[1].length = 0;
mysql_stmt_bind_param(stmt, bind);
mysql_stmt_execute(stmt);
mysql_stmt_close(stmt);
在实际程序中,您应该检查每个语句的返回值,添加用于错误管理的代码。
您还可以通过sprintf
传递变量(例如,查看How to pass variable in mysql_query),但它会带来更高的安全风险(至少考虑用户提供的值的mysql_real_escape_string()
函数)
进一步详情: