2012-02-08 6 views
1

CプログラミングAPIを経由して、ストアドプロシージャからパラメータを取得する方法:それのほとんどのデータの行をフェッチに向けここで私はいくつかの検索を行い、CプログラミングAPIを精査しました

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

こと戻ってくるのは簡単です。 SPROCは(...私は、私は意志のパラメータをバインドする必要があります知っている)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 
    } 
} 

私はこのようなルックスを呼び出していますSPROC:

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

SO - 私は2つの出力パラメータstatusとemsgを得るためのAPI呼び出しを理解できません。また、sprocがゼロ行を生成する場合(dbのユーザ入力の検証には、それを行うために余分な呼び出しを行う必要がありません)、 'res'はNULLを返すので、出力パラメータをどのように取得するかはわかりませんその場合...

TIA!

+0

私は 'mysql_use_result(cgi-> conn)'を何とか2回呼び出さなければならないという意味で、プロシージャパラメータの代わりに "代わりに"を使用することをお勧めします( – triclosan

答えて

2

このように試して

最初CALL get_graph_data('xxx','yyy', @a, @b); 、その後select @a, @b;

UPDT あなたが代わりに準備文のAPIのシンプルなインターフェイスを使用することができます。しかし、statusemsgの値を得るには、イネーブルmultiple-statement executionを設定する必要があります。その後、「同期外れ」エラーが消えるはずです。

+0

)。 )はすでに行を返しています。私はこれをやろうとしていますが、「コマンドが同期していません。このコマンドをすぐに実行することはできません " –

+0

heh私は 'enter key'を押して、このコメントが完了する前に叩かれてしまいました –

+0

wowもう一度やりました! –

関連する問題