- ベストアンサー
C言語でMySQLを利用するときのエラー
- C言語でMySQLを操作する際に表示されるエラーについて
- MySQLを操作するC言語プログラムで表示されるエラーの原因と解決策
- C言語でMySQLを使用する際に発生するエラーとその対処方法
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
MySQL 5.5.25がインストールされてました。 # いくらか前に試しに入れた模様。 >接続先がポート0番でいいのでしょうか? 0でもよろしくやってくる…ようですな。 const char *sever ="localhost"; const char *user = "root"; const char *password = "********"; const char *database = "mysql"; unsigned int portnumber = 0; unsigned int num_fields; con = mysql_real_connect(mysql, sever, user, password, database, portnumber, NULL, 0); if(NULL==con) { printf( "SQLのオープンに失敗しました.\n" ); exit(1); } mysql_query( mysql, "select host,password from user"); result = mysql_store_result( mysql ); if(NULL != result) { num_fields = mysql_num_fields( result ); printf("fieldの数は%dです。",num_fields); } else { int ErrorNo = 0; char *error = NULL; ErrorNo = mysql_errno(mysql); error = (char*)mysql_error(mysql); printf("errno = %u, error = %s\n", errno, error); } で、一応の出力はありました。 mysql_query()が未実行だとmysql_store_result()の戻り値はNULL、ErrorNoは0、errorは空文字になっていました。 # errnoという名前は、標準Cライブラリとカブるので変更。 # VC++2010EEではコンパイルエラーになりましたし…。 mysql_query()で第2引数が空文字だとmysql_store_result()の戻り値はNULL、ErrorNoは0、errorは"Query was empty"でした。 # mysql_query( mysql, ""); の時。 http://dev.mysql.com/doc//refman/5.1/ja/mysql-store-result.html >mysql_store_result()は結果セットが失敗した場合、ゼロポインターも戻します。mysql_error()が空でないストリングをを戻すか、mysql_errno()がゼロ以外を戻すか、mysql_field_count()がゼロを戻すかをチェックすることによって、エラーが起こったか否かをチェックすることができます。 とのコト。 クエリー発行していないのに結果を受け取ろうとする。 という、現状のコードが誤っているのかと。 >mysql.exe の 0x5b8a8f04 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000048 を読み込み中にアクセス違反が発生しました はNULLポインタアクセスによるものでしょう。 >試しにmysql.exeを直接起動してみるとやはり、エラーの画面が出ます。 こっちは原因不明ですが。 # どう起動したのか、どんなコマンド投入したのか、表示されたエラーがなんだったのか…とか不明ですし。
その他の回答 (2)
- Wr5
- ベストアンサー率53% (2173/4061)
LinuxかfreeBSDか……いずれにしろ非Windowsの例ですが。 http://www.kattch.com/~kattch/MySQL/06_3.html その上で…… >unsigned int portnumber = 0; >con = mysql_real_connect(mysql, sever, user, password, database, portnumber, NULL, 0); 接続先がポート0番でいいのでしょうか? # MYSQL_PORT_DEFAULTで0にはなっているみたいですけど…。 mysql_store_result()の前にmysql_query()とか必要そうですが、そこら辺どうなんでしょう? # というか掲示されたコードでmysql_store_result()の戻り値ってどうだったんでしょう? # NULLだった場合にmysql_errno()でエラーコード取得する流れかと思いますが。 >試しにmysql.exeを直接起動してみるとやはり、エラーの画面が出ます。 データベースの設定がおかしいとか、そういったことはありませんか?
- Wr5
- ベストアンサー率53% (2173/4061)
MySQLのバージョンも明記すべき…かと思いますが。 >MYSQL_RES *result; >unsigned int num_fields; >result = mysql_store_result( mysql ); >num_fields = mysql_num_fields( result ); >printf("fieldの数は%dです。",num_fields); >を消せば、正常に終了して、 となると…… mysql_store_result()の戻り値はどんな感じなんでしょうかね? と……。 http://www.mmdb.net/m_kaneko/mysql/kansu/mysql_store_result.html >戻り値 >結果の MYSQL_RES 結果構造体。エラーがある場合 NULL。 となっていますし。 # で、どうやってエラー情報取るんだろう? # mysql_errno()…かな?
お礼
迅速な回答ありがとうございます。 int errno; char *error; errno = mysql_errno(mysql); error = (char*)mysql_error(mysql); printf("errno = %u, error = %s\n", errno, error); を入れてみるなど、色々いじってみましたが、どうしてもmysql.exeがうまく動かず、どうにもなりません…
補足
すいません、MySQLのバージョンは5.5です。
お礼
返信が遅くなり申し訳ございません。mysql_query()の部分を入れると、mysql.exeの問題も起こらず、ちゃんとfield数が得られました。また、進めていけそうです。ありがとうございました!