在 c 中调用 mysql 存储过程,传递变量参数
Calling mysql stored procedure in c, passing variable argument
我在 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 table '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)
在 table 考试中插入一个新行。
那么,在 C 中,如何使用 scanf()
获取参数代码、名称、成本,以及如何使用它们来执行我的存储过程?
如果您要问 "how do I build the CALL MYPROC(ARG1, ARG2...)
string within my C program",您可以使用函数 snprintf
,它将格式化数据写入已知长度的字符串。
char query[1000];
snprintf(query, 1000, "CALL MYPROCEDURE(\"%s\", \"%s\", %f);", code, name, cost);
mysql_query(conn, query);
请注意,MySQL table 中约束的边界检查(即字段 code
的类型为 CHAR (5)
,name
的类型为VARCHAR (30)
) 也必须注意。类型为 CHAR(N)
而不是 VARCHAR
的列将恰好包含 N
个字符。
我在 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 table '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)
在 table 考试中插入一个新行。
那么,在 C 中,如何使用 scanf()
获取参数代码、名称、成本,以及如何使用它们来执行我的存储过程?
如果您要问 "how do I build the CALL MYPROC(ARG1, ARG2...)
string within my C program",您可以使用函数 snprintf
,它将格式化数据写入已知长度的字符串。
char query[1000];
snprintf(query, 1000, "CALL MYPROCEDURE(\"%s\", \"%s\", %f);", code, name, cost);
mysql_query(conn, query);
请注意,MySQL table 中约束的边界检查(即字段 code
的类型为 CHAR (5)
,name
的类型为VARCHAR (30)
) 也必须注意。类型为 CHAR(N)
而不是 VARCHAR
的列将恰好包含 N
个字符。