環境
Linux Ubuntu 18.04
mariaDB
C言語
以下のC言語のプログラムを動かすと「Commands out of sync; you can't run this command now」というエラーが出ます。
おそらくMYSQLで不正な処理があると思っているのですが、初めてSQLのプログラムを書いたこともありどこが原因かわかりません。
どうか皆様のご教授していただきたいです、宜しくお願いいたします。
プログラムの簡単な説明をします。
ます以下のようなMYSQLのjoindata,taglistテーブルがあります。
taglistテーブルからtagを1つ取り出し、取り出したtagとjoindataテーブルのtagが一致する行を全て取り出し、tag名.csvを出力したいです。
出力先は、/tmp/splitdataディレクトリの中にa~z,otherディレクトリが用意してあるので、タグ名の1文字目に一致したディレクトリに出力したいです。
具体例を説明すると、taglistからdogを取り出した場合、joindataのtagで、dogの行をすべて取り出し、/tmp/splitdata/d/dog.csvを作りたいです。
c
1#include <stdio.h> 2#include <string.h> 3#include <stdlib.h> 4#include "mysql/mysql.h" 5 6int main(void) 7{ 8 //MYSQLを利用するために必要な構造体 9 MYSQL *conn = NULL; //接続を表す構造体 10 MYSQL_RES *res = NULL;//SELECT文などの結果を表す構造体 11 MYSQL_ROW row; //MYSQL_RESの中の1レコードを示す構造体 12 13 char *sql_serv = ""; 14 char *user = ""; 15 char *passwd = ""; 16 char *db_name = ""; 17 unsigned int port = 3306; 18 19 char *firstLetter; //1文字目抽出用 20 char *query;//実行したいqueryを格納 21 22 // mysql接続 23 conn = mysql_init(NULL);//接続の初期化 24 mysql_options(conn, MYSQL_SET_CHARSET_NAME, "utf8mb4");//オプションの文字コードを設定。 25 if (!mysql_real_connect(conn, sql_serv, user, passwd, db_name, port, NULL, 0)) 26 { 27 // error 28 fprintf(stderr, "%s\r\n", mysql_error(conn)); 29 exit(-1); 30 } 31 32 33 //query実行 34 35 // taglistテーブルから全tagを取得 36 if(mysql_query(conn,"select tag from taglist;")) 37 { 38 // error 39 fprintf(stderr, "%s\r\n", mysql_error(conn)); 40 exit(-1); 41 } 42 //queryの結果を取得 43 res = mysql_use_result(conn); 44 sprintf(query, "select latitude, longitude, time, url from jointag where tag = '%s' into outfile './splitdata/%s/%s.csv' fields terminated by ','", row, firstLetter, row);//実行したいqueryを書く 45 while(NULL != (row = mysql_fetch_row(res))){//NULLになるまで一行ずつrow取り出す 46 //row[0]の1文字目を抽出 47 strncpy(firstLetter, row[0], 1); 48 firstLetter[1]='\0'; 49 50 if ((firstLetter >= 'a' && firstLetter <= 'z') || (firstLetter >= 'A' && firstLetter <= 'Z')) 51 { //1文字目がアルファベット 52 if (mysql_query(conn, query)) 53 { 54 // error 55 fprintf(stderr, "%s\r\n", mysql_error(conn)); 56 exit(-1); 57 } 58 } 59 else 60 {//1文字目がアルファベット以外 61 firstLetter = "other"; 62 if (mysql_query(conn, query)) 63 { 64 // error 65 fprintf(stderr, "%s\r\n", mysql_error(conn)); 66 exit(-1); 67 } 68 } 69 } 70 71 //構造体を開放 72 if(NULL != res) 73 { 74 mysql_free_result(res); 75 } 76 77 // 接続切断 78 if(NULL != conn) 79 { 80 mysql_close(conn); 81 } 82 83 return 0; 84}
joindata
1列名:tag,latitude, longitude, time, url 2以下テーブルのデータ 3-------------------------------------------------------------------------- 4okanagan,48.947308,-119.439239,2013-07-30 23:57:51,http://farm7.static.flickr.com/6012/6001472815_87c26d4ed1.jpg 5moca,37.426,127.008,2013-07-30 23:57:47,http://farm8.static.flickr.com/7309/9407510864_0a63c471af.jpg 6gwacheon,37.426,127.008,2013-07-30 23:57:47,http://farm8.static.flickr.com/7309/9407510864_0a63c471af.jpg 7 ・ 8 ・ 9 ・
taglist
1列名:tag 2以下テーブルのデータ 3-------------------------------------------------------------------------- 4apple 5dog 6diary 7 ・ 8 ・ 9 ・
回答2件
あなたの回答
tips
プレビュー