プロが教える店舗&オフィスのセキュリティ対策術

mysqlに接続し結果を返しDBを閉じるまでの一連の処理の関数を作りたいのですが、
以下のようなコードを使い、引数respを実行しDBから結果を取ってくるにはどの様に書いたらいいでしょうか。
関数名称と引数はこの通りです。int query(const char* a , resp)

char sql_str[255];
char *sql_serv = "○○";
char *user = "○○";
char *passwd = "";
char *db_name = "○○";

conn = mysql_init(NULL);
if(!mysql_real_connect(conn,sql_serv,user,passwd,db_name,0,NULL,0) ){
printf("%s\n",mysql_error(conn));
return -1;
}


mysql_options(conn, MYSQL_SET_CHARSET_NAME, "utf8");

copyString(sql_str,""); //←発行したいSQLを入力
if(mysql_query(conn,sql_str)){
printf("%s\n",mysql_error(conn));
mysql_close(conn);//
return -1;
}

resp = mysql_store_result(conn);
if(resp == NULL){
printf("%s\n",mysql_error(conn));
mysql_close(conn);
return -1;
}
mysql_free_result(resp);
mysql_close(conn);
return 0;
}

質問者からの補足コメント

  • CプログラムでMySQL上のテーブルを扱うことはできるのですが、上記の一連のコードを関数にして他のプログラムで使えるようにしたいです。

      補足日時:2020/07/29 16:18

A 回答 (2件)

No.1です。



論理モジュールであるにせよ物理モジュールであるにせよ、同一プログラム内の他の関数内から呼び出される関数にしたい・・・ということでしたら、他の関数からどのように使われるようにしたら他の関数から使いやすいかを考えて引数とリターン値を設計されればよいだけだと思うのですが。。。
ようは、そのプログラム内で扱うデータベース名、テーブル名が固定であればそれらは作成する関数を呼び出す側から提供される必要は無く、それ以外の検索条件と抽出する項目の指定を受け取ればよいだけです。
ただし、先々の拡張性を考慮してそれらも指定するように設計するか。。。 そこは作者の考え次第でしょう。
あと必要な指定は取り出した値を何処にセットするかの指定ですね。この領域は呼び出し元がメモリを用意してそのポインターを作成する関数へ引数で渡すことになります。

また、作成する機能をライブラリにし、どのプログラムでも使えるようにしたいということでしたらCのライブラリの作り方、コンパイルの仕方を勉強されればよいです。

そういうことではなく???
    • good
    • 1
この回答へのお礼

度々回答ありがとうございます!
引数respの書き方を変えたところうまく動きました!
ありがとうございました。

お礼日時:2020/07/29 17:44

えっと。

。。
C言語のプログラムでMySQL上のテーブルを扱いたいということですよね?
でしたらまずはGoogleなどで「C言語 MySQL」といった簡単なキーワードで検索されるか、本屋さん(ネットショップを含む)でMySQLの解説本を手にしてみてください。

ちなみにMySQLのリファレンス・マニュアルにもC言語APIを開設した章だったか節だったかがあったはずです。
MySQLの公式Webサイトを覗いてみて下さい。日本語もあったように記憶します。


ですが。。。
その前にリレーショナルデータベースのテーブルに対して検索に適合したデータを読み出す・・・というSQLはお分かりなのですよね?
ご質問にはテーブル構造も検索条件も書かれていないにも関わらず、「引数respを実行しDBから結果を取ってくるにはどの様に書いたらいいでしょうか」とありましたのでその辺がちょっとどうなのかなぁと不安に思った次第です。
もしリレーショナルデータベースというものや、それを扱うためのSQL(Structured Query Language)の基本を勉強されていないのでしたら、まずはそこをしっかり学ばれないとそれを扱うプログラムは作れません。

参考まで。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
すみません、説明が足りていませんでした。「C言語のプログラムでMySQL上のテーブルを扱いたい」で合っています。
「リレーショナルデータベースのテーブルに対して検索に適合したデータを読み出す」このSQLはわかります。
SQLのテーブルをC言語で扱うことはできるのですが、それを関数にして使いたく、その作り方を知りたいということでした。

お礼日時:2020/07/29 16:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!