2012-02-08 37 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