如何通过C编程API从存储过程中获取参数

时间:2012-02-08 11:48:06

标签: mysql

我已经完成了一些搜索并仔细检查了这里的C编程API:

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

其中大部分都是为了获取返回的数据行,这很容易。从C程序中调用这样的sproc(我知道我应该绑定参数...):

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
   } 
}
我打电话的SPROC看起来像这样:

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

所以 - 我无法弄清楚API调用以获得两个输出参数状态和emsg。另外,在sproc产生零行的情况下(用户输入的某些验证必须在db中进行而不必进行额外的调用来执行此操作)然后'res'返回NULL,因此不确定如何获取输出参数那个案子......

TIA!

1 个答案:

答案 0 :(得分:2)

以这种方式尝试

首先CALL get_graph_data('xxx','yyy', @a, @b); 然后select @a, @b;

<强> UPDT 您可以使用简单的界面而不是Prepared Statement API。但是,您应该设置启用multiple-statement execution以获取statusemsg的值。然后“不同步”错误就会消失。