我已经完成了一些搜索并仔细检查了这里的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!
答案 0 :(得分:2)
以这种方式尝试
首先CALL get_graph_data('xxx','yyy', @a, @b);
然后select @a, @b;
<强> UPDT 强>
您可以使用简单的界面而不是Prepared Statement API。但是,您应该设置启用multiple-statement execution以获取status
和emsg
的值。然后“不同步”错误就会消失。