使用mysql_查询构造中的变量作为值

使用mysql_查询构造中的变量作为值,mysql,c,parameter-passing,Mysql,C,Parameter Passing,我需要在mysql中重新填充一些表行,我正在使用C API。该表有2列标题为“变量”和“值”,4行有4个变量的名称和值 我可以通过以下代码重新填充任何值,例如VAR1的值: if(mysql_query(conn, "REPLACE INTO TAULA_DADES SET VARIABLE='VAR1',VALOR=3")){ finish_with_error(conn); } 但是,我不知道如何在字段中输入C变量的值,例如: int a; 类似的方法应该有效(未经测试,只是一个可能方法

我需要在mysql中重新填充一些表行,我正在使用C API。该表有2列标题为“变量”和“值”,4行有4个变量的名称和值

我可以通过以下代码重新填充任何值,例如VAR1的值:

if(mysql_query(conn, "REPLACE INTO TAULA_DADES SET VARIABLE='VAR1',VALOR=3")){
finish_with_error(conn);
}
但是,我不知道如何在字段中输入C变量的值,例如:

int a;

类似的方法应该有效(未经测试,只是一个可能方法的示例):

在实际程序中,您应该检查添加错误管理代码的每条语句的返回值

也可以通过<代码> SaveTFF(例如查看)传递变量,但它会带来更高的安全风险(至少考虑用户提供的值的函数)。 进一步详情:


我不知道这个MySQL C API(可能有一个函数来完成这项工作),但是
sprintf()
肯定会有帮助。使用
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);