• ベストアンサー

C++でMySQLへの接続を試みるも失敗してしまいました

皆様こんにちは。 http://questionbox.jp.msn.com/qa3838662.html http://okwave.jp/qa4845183.html 上記URLのページの内容とほぼ同一でしたので、 参考にしつつ、 C++でMySQLへの接続を行い、 プログラムの動作中で得る変数を DB内のテーブルに insertするプログラムを書いてはみたものですが、 どうもうまく行かず困っています。 プログラム内で実行したかったのは、 プログラム内で得た2つの変数を MySQLに登録するという内容でした。 プログラムを動かすと、 「不正な命令です」とプログラムが止まるのですが、 どこで止まるかを1つづつ確認したら、 MySQLにinsertコマンドを出すところで 止まるのが分かりました。 insertする2変数(「answer1」と「answer2」)は共に、 英数字で構成される100文字以内のものです。 インサートしたいテーブル名は「table_0413」としています。 テーブル「table_0413」には、 「A1」と「A2」という名前の2つのカラムを設けています。 ---------------------------------------------------------- char query[256]; if(sprintf(query, "INSERT INTO table_0413 VALUES (%s,%s)", answer1, answer2)); mysql_query(conn, query); ---------------------------------------------------------- どうすれば、 プログラム内で得た2変数の値を、 正常にDBにinsertできるようになるのでしょうか? 簡単な内容でしたら、 申し訳ありませんが、 アドバイスいただけると、とても嬉しいです。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • c_iamok
  • ベストアンサー率100% (2/2)
回答No.4

ん。 >どうして変数だと、「不正な命令」となってしまうのだろう? と、ご自信でもコメントしていますが、 定数を入れて、普通に挿入処理が出来ているんだから、 これは、単純に「型」とかが一致していないんじゃないか? answer1やanswer2の型を、 そのソースに合うように、少し変更してごらん。

kdome
質問者

お礼

確かに、そのとおりですね! 変数を「c_str」で指定しなおしてあげたら、 何事もなかったかのように、 insertに成功してました。 どうもでした!

その他の回答 (3)

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.3

>ここで、answer1とanswer2の部分を、 >変数ではなく、数字にしてみたら、 answer1 と answer2 の値をセットしている箇所の ソースコードはどういった内容ですか?

kdome
質問者

お礼

色々と勉強させていただきました。 いくつかアドバイスいただきまして ありがとうございました! 意見、参考になりました。

kdome
質問者

補足

引き続きありがとうございます。 以下のようにしたら、 問題なく、MySQLに登録がされていました。 宜しくお願い致します。 if(sprintf(query, "INSERT INTO table_0413 VALUES (%s,%s)", "0.0000457", "0.0004798"));

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.2

insert文を実行する前の話として、 データベースへの接続そのものは 成功しているのでしょうか? >mysql_query(conn, query); 念のため、connに値をセットしている箇所から、 insertのqueryを発行している箇所までの ソースの最新状態を見せていただけますか?

kdome
質問者

お礼

その後、 色々とやっていて分かったのですが、 if(sprintf(query, "INSERT INTO table_0413 VALUES ('%s','%s')", answer1, answer2)); ここで、answer1とanswer2の部分を、 変数ではなく、数字にしてみたら、 すんなりと、MySQLに登録がされていました。 if(sprintf(query, "INSERT INTO table_0413 VALUES ('%s','%s')", "0.335475", "0.257414")); どうして変数だと、「不正な命令」となってしまうのだろう?

kdome
質問者

補足

継続的にありがとうございます。 感謝しております。以下のとおりです。ご参照下さい。 以下のソースにて、いつも、 「接続に成功しました」の後、 「経過1」は表示されるのですが、 「経過2」は表示されれない次第です。 MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; char *server = "localhost"; char *user = "user_name"; char *password = "passwd"; char *database = "test3"; conn = mysql_init(NULL); printf("%s\n", "接続に成功しました"); /* Connect to database */ if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { printf("%s\n", "接続に失敗しました"); exit(1); /* send SQL query */ char query[256]; printf("%s\n", "経過1");      if(sprintf(query, "INSERT INTO table_0413 VALUES ('%s','%s')", answer1, answer2)); printf("%s\n", "経過2"); mysql_query(conn, query); res = mysql_use_result(conn); printf("%s\n", "経過3"); /* close connection */ mysql_free_result(res); mysql_close(conn); ------------------------------------------------------- また、MySQLでテーブルを作成した際は以下のとおりでした。 mysql> CREATE TABLE table_0413(A1 VARCHAR(100), A2 VARCHAR(100)); Query OK, 0 rows affected (0.00 sec)

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

answer1, answer2 が数値型以外のカラムであるならば、 組み立てるSQL文は、 INSERT INTO table_0413 VALUES ('%s','%s') あるいは INSERT INTO table_0413 VALUES ("%s","%s") という形である必要があるのではないかと思います。

kdome
質問者

補足

ご回答ありがとうございます! 早速試させていただいたのですが、 プログラムを実行してみると、 先ほどまでと全く同じ結果になってしまい、 やはり、インサート文のところで こけてしまいましたです。