在C中调用mysql存储过程,并传递变量参数

时间:2019-02-20 15:50:32

标签: mysql c mysql-connector

我在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()来获取参数代码,名称,成本,以及如何使用它们执行存储过程?

1 个答案:

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