在 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 个字符。