2012-02-08 62 views
1

我已经做了一些搜索和审查的C语言编程的API,它是在这里得到了从存储过程的参数:如何通过C编程API

http://dev.mysql.com/doc/refman/5.1/en/c-api-prepared-statement-functions.html

它的大部分面向对获取数据行回来,这很容易。该存储过程是被称为像这样从C程序(我知道我应该绑定参数我会...):

sprintf(cmd, "CALL get_graph_data(\"%s\", \"%s\");", symbol, scope); 

if (mysql_query(conn, cmd)) { 
     fprintf(stderr, "%s\n", mysql_error(conn)); 
     exit(1);  
} 

res = mysql_use_result(conn); 
if(res == NULL) { ;  // how do I get output parameters in this case ? umm... 
} else {     
    num_fields = mysql_num_fields(res); 
    while ((row = mysql_fetch_row(res)) != NULL) 
    { 
     do stuff 
    } 
} 

,我呼吁看起来像这样的存储过程:

create procedure get_graph_data (
    symbol varchar(20), 
    period varchar(5), 
    OUT status SMALLINT, 
    OUT emsg varchar(255) 
) 

所以 - 我无法弄清API调用来获取两个输出参数status和emsg。另外,在sproc生成零行的情况下(某些用户输入验证必须在db中进行,而不必额外调用它),那么'res'将返回NULL,因此不确定如何获取输出参数那种情况...

TIA!

+0

考虑在程序参数 – triclosan 2012-02-08 12:00:54

回答

2

尝试以这种方式

第一CALL get_graph_data('xxx','yyy', @a, @b); 然后select @a, @b;

UPDT 您可以使用简单的界面,而不是预处理语句API。但是您应该设置启用multiple-statement execution以获得statusemsg的值。然后“不同步”错误应该消失。

+0

周围使用'instead“,但是然后我有两个结果集,然后尝试并得到,这意味着我必须以某种方式调用'mysql_use_result(cgi-> conn)'两次注意sproc get_graph_data )已经返回行。我一直在尝试这样做,但得到“命令不同步;你现在不能运行这个命令“ – 2012-02-09 00:09:19

+0

heh我点了'enter key',这个评论在我完成之前就被猛击了 – 2012-02-09 00:10:17

+0

哇我再次做了!好吧,我会继续在周围徘徊,如果我卡住了重新发布一个新的问题与我在哪里。Thx再次为答复! – 2012-02-09 00:14:38