我在mysql中建立了一个数据库,并创建了一些存储过程。现在,我需要使用C程序启动这些SP。
我已经使用以下方法成功地将数据库连接到了c:
char u[255];
char p[255];
int main (int argc, char *argv[])
{
scanf("%s",u);
scanf("%s",p);
conn = mysql_init (NULL);
login = mysql_real_connect(conn, "localhost",u,p, "ASL", 3306, NULL, 0);
}
我可以不带任何参数调用SP。例如,我的SP mostra_pazienti()
显示了mysql表'paziente'中包含的所有行,而我是这样编写的:
query = "call mostra_pazienti()";
mysql_query (conn,query);
MYSQL_RES *result = mysql_store_result(conn);
int num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
for(int i = 0; i < num_fields; i++)
{
printf(" %s ", row[i] ? row[i] : "NULL");
}
printf ("\n");
}
}
但是,现在我需要大声一点地运行一个将一些参数作为输入的过程。
例如mysql过程esame_aggiungi(IN code CHAR(5),IN name VARCHAR(30),IN cost FLOAT)
在表检查中插入新行。
因此,在C语言中,如何使用scanf()
来获取参数代码,名称,成本,以及如何使用它们执行存储过程?
答案 0 :(得分:0)
如果您问“如何在C程序中构建CALL MYPROC(ARG1, ARG2...)
字符串”,则可以为此使用函数snprintf
,该函数将格式化的数据写入已知长度的字符串。
char query[1000];
snprintf(query, 1000, "CALL MYPROCEDURE(\"%s\", \"%s\", %f);", code, name, cost);
mysql_query(conn, query);
请注意,必须注意对MySQL表中的约束进行边界检查(即,字段code
的类型为CHAR (5)
,而name
的类型为VARCHAR (30)
)以及。类型为CHAR(N)
而不是VARCHAR
的列将完全包含N
个字符。