2017-04-06 6 views
0

私はMariaDB CコネクタAPIを使用してCで関数を作成しています。ユーザーは新しいユーザー名とパスワードを入力してMariaDB/MySQLデータベースに格納できます。私はstrcpy_s()とstrcat_s()を使用して、データベース内に情報を配置するMariaDB/MySQLクエリを生成するためにバッファ内で複数の文字列を連結しました。これにより、 'フィールドリストに未知の列'エラーが発生します。私は前に、私が "foo"と "bar"をプリセット文字列として実装していたときに、同様の質問をしました。そして、私が受け取った答えは、 "foo"と "bar"を "foo" ''と ''バー ''と表示されます。これはうまくいった。実行時に "foo"形式と "foo"形式の間でユーザーから文字列を取り出す方法はありますか?以下は、関数の関連するコードです。MariaDB/MySQL CコネクタAPIに関するC言語の文字列入出力?

void NEW_PLAYER(MYSQL *con) 
{ 
    char NAME[16]; 
    char PASSWORD[16]; 
    char ch = NULL; 
    unsigned int i = 0; 

    printf("New Username: "); 
    while (ch != '\n') // terminates when the user presses enter 
    { 
     ch = getchar(); 
     NAME[i] = ch; 
     i++; 
    } 
    NAME[i] = '\0'; 
    i = 0; 
    ch = NULL; 
    printf("New Password: "); 
    while (ch != '\n') // terminates if user hits enter 
    { 
     ch = getchar(); 
     PASSWORD[i] = ch; 
     i++; 
    } 
    PASSWORD[i] = '\0'; 
    printf("%s", NAME); 
    printf("%s", PASSWORD); 
    char TEMP[256]; 
    char str1[] = "INSERT INTO PLAYERS VALUES("; 
    strcpy_s(TEMP, str1); strcat_s(TEMP, NAME); 
    strcat_s(TEMP, ", "); 
    strcat_s(TEMP, PASSWORD); 
    strcat_s(TEMP, " ,0, 0, 0, 1)"); 

    if (mysql_query(con, TEMP)) { 
     fprintf(stderr, "%s\n", mysql_error(con)); 
     exit(-1); 
    } 
} 

答えて

0
  • あなたはINSERT文でリテラル引用符で囲む必要があります。
  • NAMEPASSWORD, and/or TEMP`が十分に大きくない場合、メモリが破損します。
  • NAMEまたはPASSWORDに特殊文字(esp、quotes)をエスケープする必要があります。

Cは、MySQLで再生する言語が非常に低いです。ほとんどの言語では、修正を加えても、5〜10行のコードが必要です。

+0

コードの意味を教えてもらえますか? – RakovS

+0

Perl、PHP、VB、Java、Pythonのいずれかを知っていますか? –

+0

コンドル。特定の言語を使用していることがわかっているのは、それがチームの全員が知っている場合です。 "Cがより良い最適化を可能にする"ためであれば、それは偽です。もちろん、コードをマイクロ最適化することができます。しかし、実際のパフォーマンスの向上は、大きな画像を見て、アルゴリズムを最適化することです。それはあなたの時間の多くが文字列操作のようなトリビアに費やされたときにするのは難しいです。 50年前、「アセンブリ言語」にも同様のマントラが適用されました。 –

関連する問題